Кассандра: моделирование временных данных - PullRequest
1 голос
/ 05 января 2012

Предположим, что устройство может выдавать n сигналов в случайное время. Мы собираем эти данные от m устройств за некоторый промежуток времени. Итак, наша «мета-схема»

DeviceId : int
SignalId : int
SignalDateTime : DateTime (with mSec as YY-MM-DD HHMMSS.mm)
ExtraData : String

Я хочу поместить эти данные в кассандру, и я пытаюсь понять различные способы. Я хотел бы иметь возможность получать данные по любой комбинации из трех значений (DeviceId, SignalId, SignalDateTime).

Я могу представить себе использование DeviceId в качестве ключа строки, а затем сопряжение SignalDateTime: SignalId. Но тогда что мне делать с ExtraData? Может быть, сделать его суперколонкой? Точно так же я мог бы создать уникальные ключи строк с DeviceId и SignalDateTime, но разумно ли это использовать Cassandra?

1 Ответ

3 голосов
/ 09 января 2012

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

Вы можете начать со следующих семейств столбцов:

CF1
RowKey: DeviceID
ColumnNames: SignalDateTime
Value: Serialized [SignalID + ExtraData]

CF2
RowKey: SignalID
ColumnName: SignalDateTime
Value: Serialized [DeviceID + ExtraData]

Значением будет некоторая сериализованная форма * ID + ExtraData (с использованием JSON, ProtocolBuffers и т. Д.). С помощью этой схемы вы можете запросить все данные от Device1 от t0 до t1 или все данные от Signal1 от t0 до t1.

Возможно, вы хотели бы также запросить DeviceID и SignalID от t0 до t1. Это тот случай, когда имеет смысл использовать составные столбцы:

CF3
RowKey: DeviceID
ColumnName: CompositeColumn[SignalID:SignalDateTime]
Value: ExtraData

Чтобы запросить это семейство столбцов, вы должны получить строку, основанную на DeviceID и столбцах слайса для SignalID и времени в пределах вашего временного диапазона. Документы Pycassa объясняют некоторые основы составных столбцов .

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