2

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

请帮我解决这个问题,还有其他方法吗?

谢谢和问候, 坎纳达桑

4

1 回答 1

5

我在这里看到您的方法存在 3 个问题,我将在下面解决:

  • 超级列族,
  • 节俭与 cql3,
  • json 数据作为单元格值。

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

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

除了存储 json 数据,您还可以使用本地集合数据类型,如列表和地图等。如果您仍想使用 JSON,Cassandra 从 2.2 版开始改进了 JSON 支持

一般来说,查询每个设备和每个时间段非常简单:

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

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

希望有帮助!

于 2013-08-01T08:34:09.543 回答