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

kan*_*san 2 datamodel cassandra nosql phpcassa cassandra-jdbc

假设有10个设备(dev01,dev02,dev03..etc).

它以一定的间隔时间发送数据,我们收集这些数据,因此我们的数据模式是

 dev01      :int
 signalname :string
 signaltime :date/time[with YY-MM-DD HHMMSS.mm]
 Extradata  :String
Run Code Online (Sandbox Code Playgroud)

我想将数据推送到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
Run Code Online (Sandbox Code Playgroud)

请帮助我解决这个问题,还有其他任何方式吗?

感谢和问候,Kannadhasan

Joh*_*ohn 5

我在这里看到了3个与您的方法有关的问题,我将在下面介绍:

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

在开始之前:不鼓励使用超级列族.在这里阅读更多.复合键(如下所述)是要走的路.

此外,您可能需要阅读CQL3,因为thrift是 1.2 以来的遗留API.

您可以使用本机集合数据类型(如列表和映射等),而不是存储json数据.如果您仍想使用JSON,那么自2.2版以来,Cassandra中的JSON支持得到了改进.

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

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

或者,如果要一次查询多个设备(但只有一个事件类型)的数据,则可以将信号类型用作行键(并将timeuuid/timestamp用作列键).在此博客条目中阅读更多关于cassandra中的时间序列数据.

希望有所帮助!