Для мониторинга некоторых распределенных программ я вставляю их данные мониторинга в таблицу 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 для данных и запросов временных рядов?