Длинная строка кассандры с разными типами данных

Я прочитал следующую статью о Cassandra CQL3 и Thrift API http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows

В статье приводится пример создания схемы сбора данных с датчиков. Они показывают решение «широкой строки», делая отметку времени в виде столбца. Сила Кассандры, насколько я понимаю, в поддержке 2 миллиардов столбцов и быстром способе извлечения данных по столбцам.

В статье на CQL3 строят таблицу

CREATE TABLE data (
  sensor_id int,
  collected_at timestamp,
  volts float,
  PRIMARY KEY (sensor_id, collected_at)
) WITH COMPACT STORAGE;

что переводится как:

 sensor_id | collected_at             | volts
         1 | 2013-06-05 15:11:00-0500 |   3.1
         1 | 2013-06-05 15:11:10-0500 |   4.3
         1 | 2013-06-05 15:11:20-0500 |   5.7
         2 | 2013-06-05 15:11:00-0500 |   3.2
         3 | 2013-06-05 15:11:00-0500 |   3.3
         3 | 2013-06-05 15:11:10-0500 |   4.3

В Thrift это означает:

list data;
RowKey: 1

=> (cell=2013-06-05 15:11:00-0500, value=3.1, timestamp=1370463146717000)
=> (cell=2013-06-05 15:11:10-0500, value=4.3, timestamp=1370463282090000)
=> (cell=2013-06-05 15:11:20-0500, value=5.7, timestamp=1370463282093000)

RowKey: 2

=> (cell=2013-06-05 15:11:00-0500, value=3.2, timestamp=1370463332361000)

RowKey: 3

=> (cell=2013-06-05 15:11:00-0500, value=3.3, timestamp=1370463332365000)
=> (cell=2013-06-05 15:11:10-0500, value=4.3, timestamp=1370463332368000)

Я пытаюсь придумать пример схемы Cassandra для следующей проблемы сбора данных датчика. Допустим, я добавляю новый набор датчиков, которые имеют значение bigint (long) (вместо float).

Есть идеи, как разработать такую ​​схему таблицы, чтобы включить оба типа датчиков с разными типами данных, но сохранить столбцы на основе метки времени?

Спасибо, парень


person Guy Wald    schedule 15.04.2014    source источник


Ответы (1)


Если вам не нужно использовать КОМПАКТНОЕ ХРАНИЛИЩЕ (и обратную совместимость с Thrift), просто создайте свою таблицу как

CREATE TABLE data (
  sensor_id int,
  collected_at timestamp,
  other_field bigint,
  volts float,
  PRIMARY KEY (sensor_id, collected_at)
)

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

В качестве альтернативы вы можете продолжить использование КОМПАКТНОГО ХРАНИЛИЩА и просто переключиться на тип BLOB-объекта. Тип blob не будет выполнять никакой интерпретации или преобразования байтов, которые вы в него вставляете, поэтому точность может быть гарантирована. Я бы не рекомендовал использовать для этого текстовый тип.

person Tupshin Harper    schedule 16.04.2014