假设有 10 个设备(dev01、dev02、dev03 ..等)。
它以一定的间隔时间发送数据,我们收集这些数据,所以我们的数据模式是
dev01 :int
signalname :string
signaltime :date/time[with YY-MM-DD HHMMSS.mm]
Extradata :String
我想将数据推送到 cassandra 中,哪种方式最适合存储这些数据?
我的查询是这样的,
1 需要检索基于设备的当天数据或某个日期范围的数据?
2 5 设备当天数据?
我不确定以下将数据存储到 cassadra 的方法是否是最佳模型
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
请帮我解决这个问题, 还有其他方法吗?
谢谢和问候, 坎纳达桑
最佳答案
我发现您的方法存在 3 个问题,我将在下面解决这些问题:
- super 柱族,
- thrift 与 cql3,
- json 数据作为单元格值。
在继续之前:不鼓励使用 super 列族。 Read more here 。复合键(如下所述)是可行的方法。
此外,您可能需要read up on CQL3 ,因为 thrift 是一个遗留 API,从 1.2 开始。
您可以使用native collection data types like lists, and maps etc来代替存储json数据。 。如果您仍然想使用 JSON,可以使用 improved JSON support in in Cassandra since version 2.2 .
一般来说,按设备和按时间段查询非常简单:
- 行键是设备 ID,列键是 timeuuid
- 为了避免热点,您可以向行键添加“桶”计数器(创建复合行/分区键)以轮换节点
- 如果您知道行/设备 ID,则可以查询时间范围。
或者,如果您想一次查询多个设备(但一种事件类型)的数据,您可以使用信号类型作为行键(将 timeuuid/timestamp 作为列键)。阅读有关 cassandra 中时间序列数据的更多信息 this blog entry .
希望有帮助!
关于nosql - Cassandra 时间序列数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17987921/