С 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 объясняют некоторые основы составных столбцов .