nosql - Cassandra 时间序列数据模型

标签 nosql cassandra datamodel phpcassa cassandra-jdbc

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

相关文章:

cassandra - 无法使用 cqlsh 删除或更新 Cassandra 3.11.2 中的记录

database-design - 社交网络设计中用户和帐户对象的区别?

cocoa - Xcode 中带有 Core Data 的高级数据模型

python - 为什么 __get__ 拥有所有者而 __set__ 和 __delete__ 没有?

javascript - Firebase 排序和检索特定记录的索引

mysql - AWS Cognito Identity ID 对 SQL 主键的适用性

apache-spark - Spark SQL 和 Cassandra JOIN

Cassandra sstable 文件名格式

java - 在 nosql 环境中对用户信息建模的正确方法是什么

javascript - for循环中的异步变量