【问题标题】:Issue with cassandra data modellingcassandra 数据建模问题
【发布时间】:2017-10-13 22:26:12
【问题描述】:

我们希望使用 Apache Cassandra 来存储从领域时间传感器数据中收集的大数据。我们开发了一个能够每秒处理 100 万个事件的 IOT 平台。我们希望将它们持久保存在 Cassandra 中。

我们的桌子看起来像:

Sensor_data_by_date
Realm   text    K
Bucket  int K
dateTimeReceived    timestamp   Clustering column
sensor_id   text    
Message_id  text    
Sensor_name text

我们感兴趣的查询是:

给我“realm-a”的所有传感器数据的所有结果,日期时间范围为“5th May”到“12th May”,按“dateTimeReceived”排序。

解决方案: 由于我们的平台每秒可以处理多达 100 万个事件,当我尝试将 DATE + HOUR 作为分区键时,它仍然会增加 Casssandra 推荐的最大大小。所以我们决定将桶和领域一起作为分区键。

问题: 现在说,当我们有一个广泛的日期范围时(5 月 5 日到 13 日),我们将有多个存储桶可供查找。我们还需要支持订购。 当我们有了这个,我需要对桶使用“IN 子句”说:

where realm=realm-a and bucket in (1,2,3,4) 
and dateTimeReceived>… 
and dateTimeReceived <… order by dateTimeReceived

这会抱怨 IN 子句和 order by 不能与分页一起工作。 我也需要分页……..

你能帮我实现这个功能吗?

我们将不胜感激。

【问题讨论】:

  • 在类似的场景中,我们将 MINUTE 信息放入分区键

标签: cassandra datastax-java-driver


【解决方案1】:

您不需要(好吧,您不必...)指定 IN 子句。如果您按事件的到达时间填充存储桶,即存储桶 X 总是比存储桶 X-1 旧(或者如果您以相反的顺序存储数据,存储桶 X 总是比存储桶 X-1 新)您已经知道你的桶的顺序。因此,剩下的唯一事情就是查询每个分区(并行,无 IN)并按桶排序。在每个桶内,Cassandra 可以按时间戳排序。最后一步是以桶顺序(或反向桶顺序)处理这些事件。

关于您的 DATA + HOUR 问题,您可以使用分桶技术,或者您可以深入到 DATA + HOUR + QUARTER OF HOUR。以下是我对类似问题的一些建议:

HTH。

【讨论】:

  • 感谢 xmas79 的宝贵建议。让我试试你的方法。
猜你喜欢
  • 2019-06-29
  • 2018-12-18
  • 2015-12-25
  • 2015-04-09
  • 1970-01-01
  • 2019-09-02
  • 2018-06-16
  • 2018-07-10
相关资源
最近更新 更多