Получить конкретное количество данных временных рядов от Кассандры - PullRequest
0 голосов
/ 20 сентября 2018

Очевидно, что при работе с данными временных рядов, которые относятся к какому-либо естественному ключу разделения, например, к идентификатору датчика, его можно использовать в качестве первичного ключа.Но что делать, если нас интересует глобальное представление и нет естественного кандидата на ключ раздела?Если мы смоделируем схему следующим образом:

CREATE TABLE my_data(
 year smallint,
 day smallint,
 date timestamp,
 value text
 PRIMARY KEY ((year, day), timestamp)
) WITH CLUSTERING ORDER BY (date DESC);

(в большинстве случаев она (вероятно) будет работать просто отлично, но, учитывая, что мы знаем, какой год и дни нужно выбрать.

Что если мыНе важно, какой сегодня день, но мы ожидаем увидеть первые 50 самых последних вещейЧто если мы затем хотим увидеть следующие 50 пунктов?Есть ли способ сделать это в Кассандре?Каков рекомендуемый способ сделать это?

1 Ответ

0 голосов
/ 20 сентября 2018

Сохраняйте 2-ую таблицу года / дня.При чтении можно взять его первым.При добавлении в my_data также обновляйте, но сохраняйте вставленный кэш дней, чтобы каждое приложение пробовало вставку только один раз в день.например, добавление дополнительного ключа, чтобы можно было иметь несколько потоков, а не только одну таблицу для временного ряда:

CREATE TABLE my_data (
  key blob,
  year smallint,
  day smallint,
  date timestamp,
  value text
  PRIMARY KEY ((key, year, day), timestamp)
) WITH CLUSTERING ORDER BY (date DESC);

CREATE TABLE my_data_keys (
   key blob,
   year smallint,
   day smallint,
   PRIMARY KEY ((key), year, day)
)

Для вставок:

INSERT INTO my_data_keys (key, year, day) VALUES (0x01, 1, 2)
INSERT INTO my_data ...

Затем сохранить в памяти Набор где-нибудь, что высохранил этот ключ / год / данные, поэтому вам не нужно каждый раз вставлять его.Чтобы прочитать последние:

SELECT year, day FROM my_data_keys WHERE key = 0x01; 

драйвер возвращает итератор, для каждого элемента в нем сделать запрос к my_data, пока не будет достигнуто 50 записей.

Если вставки происходят достаточно часто, они могут просто работать в обратном направлении с сегодняшнего дня", выдавая запросы, пока не получишь 50 событий.Если данные разрежены, это может привести к большим потерям при чтении и работе другой таблицы.

...