cassandra数据建模问题

时间:2017-05-15 08:09:29

标签: cassandra datastax-java-driver

我们希望使用Apache Cassandra存储从领域时间传感器数据收集的大数据。我们开发了一个能够每秒处理100万个事件的物联网平台。我们希望将他们留在卡桑德拉。

我们的表格如下:

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”的传感器数据的所有结果,对于dateTime范围说“5th may”到“12th may”按“dateTimeReceived”排序。

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

问题: 现在说当我们提到的日期范围很广(5月5日至5月13日)时,我们将有多个桶来查找。我们还需要支持订购。 当我们有这个时,我需要使用“IN子句”来表示桶:

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

这会抱怨IN条款和命令不能与分页一起工作。 我也需要加入分页......

你能帮我解决一下如何实现这个功能吗?

非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

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

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

HTH。