Я прочитал следующую статью о 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).
Есть идеи, как разработать такую схему таблицы, чтобы включить оба типа датчиков с разными типами данных, но сохранить столбцы на основе метки времени?
Спасибо, парень