卡桑德拉时间序列数据模型

时间:2013-08-01 07:41:04

标签: nosql cassandra datamodel phpcassa cassandra-jdbc

假设有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

1 个答案:

答案 0 :(得分:5)

我在这里看到了3个问题,我将在下面介绍:

  • 超级列系列,
  • thrift vs cql3,
  • json数据作为单元格值。

在开始之前:不鼓励使用超级列族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

通常,每个设备和每个时间段查询非常简单:

  • 您的行键是设备ID,列键是timeuuid
  • 为了避免热点,您可以添加" bucket"计数器到行键(创建复合行/分区键)以旋转节点
  • 如果您知道行/设备ID,则可以查询时间范围。

如果您想一次查询多个设备(但只有一个事件类型)的数据,您可以将信号类型用作行键(并将timeuuid / timestamp用作列键)。阅读this blog entry中cassandra中有关时间序列数据的更多信息。

希望有所帮助!