Кассандра Таймсери Датамодель
Предположим 10 устройств (dev01,dev02,dev03..etc).
Он отправляет данные с некоторым интервалом времени, мы собираем эти данные, поэтому наша схема данных
dev01 :int
signalname :string
signaltime :date/time[with YY-MM-DD HHMMSS.mm]
Extradata :String
Я хочу отправить данные в Кассандру, какой способ лучше всего хранить эти данные?
Мой запрос похож,
1 Вам нужно получить данные текущего дня на основе устройства или с каким-то диапазоном дат?
2 5 Данные текущего дня устройства?
Я не уверен, что следующий способ хранения данных в кассадре - лучшая модель
Standard columnfamily Name:signalname
row key :dev01
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
columnname :timeseries(20120801124205)[YYMMDD HHMMSS][next second data]
columnvalue :Json data
row key :dev02
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
columnname :timeseries(20120801124205)[YYMMDD HHMMSS][next second data]
columnvalue :Json data
Or
Super columnfamily :signalname
row key :Clientid1
supercolumnname :dev01
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
supercolumnname :dev02
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
row key :Clientid2
supercolumnname :dev03
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
supercolumnname :dev04
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
Пожалуйста, помогите мне в этом вопросе, Любой другой способ?
Спасибо и С уважением, Каннадхасан
1 ответ
Я вижу 3 проблемы с вашим подходом, которые я рассмотрю ниже:
- семейства суперколонок,
- бережливость против cql3,
- Данные JSON как значения ячеек.
Прежде чем вы начнете: использование семейств столбцов super не рекомендуется. Узнайте больше здесь. Композитные клавиши (как описано ниже) - путь.
Кроме того, вам может понадобиться прочитать CQL3, так как Thrift является устаревшим API начиная с 1.2.
Вместо хранения данных JSON вы можете использовать собственные типы данных коллекции, такие как списки, карты и т. Д. Если вы все еще хотите работать с JSON, в Cassandra появилась улучшенная поддержка JSON, начиная с версии 2.2.
В общем, это довольно просто сделать запрос на устройство и за период времени:
- ключ строки - это идентификатор устройства, а ключ столбца - timeuuid.
- Чтобы избежать горячих точек, вы можете добавить счетчики "корзины" к ключу строки (создать составной ключ строки / раздела), чтобы вращать узлы
- Затем вы можете запросить временные диапазоны, если вам известен идентификатор строки / устройства.
В качестве альтернативы вы можете использовать свой тип сигнала в качестве ключа строки (и timeuuid/timestamp в качестве ключа столбца), если вы хотите запрашивать данные для нескольких устройств (но одного типа события) одновременно. Узнайте больше о данных временных рядов в Кассандре в этой записи блога.
Надеюсь, это поможет!