假设有10个设备(dev01,dev02,dev03..etc)。
它以一定的间隔时间发送数据,我们收集这些数据,因此我们的数据模式是
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
请帮我解决这个问题, 还有别的吗?
感谢和安培;此致 Kannadhasan
答案 0 :(得分:5)
我在这里看到了3个问题,我将在下面介绍:
在开始之前:不鼓励使用超级列族。 Read more here。复合键(如下所述)是可行的方法。
另外,您可能需要read up on CQL3,因为自1.2以来 thrift是遗留API 。
您可以使用native collection data types like lists, and maps etc,而不是存储json数据。如果您仍想使用JSON,则有improved JSON support in in Cassandra since version 2.2。
通常,每个设备和每个时间段查询非常简单:
如果您想一次查询多个设备(但只有一个事件类型)的数据,您可以将信号类型用作行键(并将timeuuid / timestamp用作列键)。阅读this blog entry中cassandra中有关时间序列数据的更多信息。
希望有所帮助!