Cassandra выбирает запрос для временных рядов данных

#cassandra #cassandra-2.0 #cassandra-2.1

#cassandra #cassandra-2.0 #cassandra-2.1

Вопрос:

У меня есть таблица, подобная:

 CREATE TABLE mydata (
my_key TEXT,
log_time TIMESTAMP,
value1 DOUBLE,
PRIMARY KEY (my_key, log_time)
);
  

Мы получаем данные временных рядов, в которые мы вставляем 100 тысяч значений для 100 тысяч ключей (по 1 значению для каждого ключа каждую минуту), поэтому новые значения добавляются каждую минуту.

Я хотел бы выполнить следующий запрос диапазона:

 Select * from mydata where my_key='1' and (log_time >='starttime' and log_time <='endtime') and (value1 > 100 and value1 < 200)
  

При текущем дизайне таблицы это возможно, поскольку значение 1 не является частью ключа разделения / кластеризации. Однако мы можем добавить индексацию по значению1, чтобы заставить его работать, или сделать его частью ключа.

Мои вопросы:

  1. Хорошая ли идея добавлять значение 1 как часть ключа?

  2. Хорошая ли идея добавить индексацию по значению1, поскольку вставки выполняются слишком часто (1 минута)?

  3. Если оба варианта не подходят, как мы можем смоделировать это требование для запросов диапазона?

Ответ №1:

Хорошая ли идея добавлять значение 1 как часть ключа?

Если вы это сделаете, то вам нужно будет знать возможные значения value1 для запроса данных. Если бы value1 это было своего рода перечисление, это было бы возможно (с in ключевым словом cql), но как double я думаю, что это не очень хорошее решение.

Хорошая ли идея добавить индексацию по значению1, поскольку вставки выполняются слишком часто (1 минута)?

Я не знаю ни одной причины, по которой вы не должны.

Комментарии:

1. Спасибо за быстрый ответ.

2. 1. значение1 является двойным значением и может быть любым двойным значением. Не перечисление или фиксированный набор значений.

3. 2. Мои сомнения по поводу индексации значения value1 связаны с тем, что мы записываем 100 тысяч значений каждую минуту с разными временными метками для одного и того же ключа. Если проиндексировано, будет ли оно автоматически обновляться немедленно или мы должны запускать индексацию каждую минуту после вставки? Есть ли какие-либо проблемы с производительностью чтения и записи?