Модель данных Кассандры для данных временных рядов - PullRequest
0 голосов
/ 03 июля 2018

Для мониторинга некоторых распределенных программ я вставляю их данные мониторинга в таблицу Cassandra. Столбцы metric_type, metric_value, host_name, component_type и time_stamp. Сценарий таков, что я собираю все метрики для всех узлов в секунду. Время в униформе для всех узлов и их метрик. Ключи (которые различают строки): host_name, component_type, metric_type и time_stamp. Я создаю свой стол, как показано ниже:

CREATE TABLE metrics (
    component_type text,
    host_name text,
    metric_type text,
    time_stamp bigint,
    metric_value text,
    PRIMARY KEY ((component_type, host_name, metric_type), general_timestamp)
) WITH CLUSTERING ORDER BY (time_stamp DESC)

, где component_type, host_name и metric_type - ключ раздела, а time_stamp - ключ кластеризации. Таблица metrics подходит для запросов, которые получают некоторые данные в соответствии со своей отметкой времени только для host_name, или metric_type, или component_type, поскольку с помощью ключей разделения Cassandra найдет раздел, в котором хранятся данные, и с помощью Ключ кластеризации извлекает данные из этого раздела, и это оптимальный случай для запросов Cassandra.

Кроме того, мне нужен запрос, который выбирает все данные, используя time_stamp. Например:

SELECT * from metrics WHERE time_stamp >= 1529632009872 and time_stamp < 1539632009872 ;

Я знаю, что таблица metric не является оптимальной для вышеуказанного запроса, потому что она должна искать в каждом разделе для извлечения данных. Я полагаю, что в этой ситуации нам следует разработать другую таблицу с time_stamp в качестве ключа раздела, чтобы данные выбирались из одного или некоторого ограниченного числа разделов. Но я не уверен в некоторых аспектах:

  • Оптимально ли установить time_stamp в качестве ключа раздела? из-за того, что я вставляю данные в базу данных каждую секунду и номера ключей разделов будут много
  • Мне нужно, чтобы в моих запросах интервал был time_stamp, и я знаю, что интервальные условия недопустимы в ключах секционирования, просто разрешены в ключах кластеризации!

Так, какова лучшая модель данных Cassandra для данных и запросов временных рядов?

1 Ответ

0 голосов
/ 03 июля 2018

Использование time_stamp в качестве ключа раздела не является оптимальным, на мой взгляд, так как это создаст много разделов.

Я бы предложил 2 решения:

1) Перейти с "week_first_day" в качестве ключа раздела. Вам нужно будет вычислить правильные ключи week_first_day на стороне вашего приложения и затем отправить несколько запросов на выборку.

2) Вы можете использовать ElasticSearch поверх кассандры. Cassandra остается основным источником данных, но у вас есть свобода делать сложные выборки. Если вам интересно, я бы порекомендовал взглянуть на Элассандру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...