Cassandra 卡桑德拉数据建模问题
我们希望使用ApacheCassandra存储从领域时间传感器数据收集的大数据。我们开发了一个物联网平台,能够每秒处理100万个事件。我们想让他们留在卡桑德拉 我们的桌子看起来像:Cassandra 卡桑德拉数据建模问题,cassandra,datastax-java-driver,Cassandra,Datastax Java Driver,我们希望使用ApacheCassandra存储从领域时间传感器数据收集的大数据。我们开发了一个物联网平台,能够每秒处理100万个事件。我们想让他们留在卡桑德拉 我们的桌子看起来像: Sensor_data_by_date Realm text K Bucket int K dateTimeReceived timestamp Clustering column sensor_id text Message_id text Sensor_name tex
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”的所有传感器数据的所有结果,如“5月5日”至“5月12日”,顺序为“dateTimeReceived”
解决方案:
由于我们的平台每秒可以处理多达100万个事件,当我甚至尝试将DATE+HOUR作为分区键时,它仍然会增加Casssandra建议的最大大小。所以我们决定将bucket和realm一起作为分区键
问题:
现在,假设我们有一个广泛的日期范围,如前所述(5月5日至5月13日),我们将有多个bucket进行查找。我们还需要支持订购。
当我们准备好这个时,我需要使用“in子句”来表示:
where realm=realm-a and bucket in (1,2,3,4)
and dateTimeReceived>…
and dateTimeReceived <… order by dateTimeReceived
其中realm=realm-a和bucket in(1,2,3,4)
和dateTimeReceived>…
和dateTimeReceived您不需要(好吧,您不必…)指定IN子句。如果在事件到达时填充存储桶,即存储桶X始终比存储桶X-1旧(或者如果以相反顺序存储数据,则存储桶X始终比存储桶X-1新),则您已经知道存储桶的顺序。因此,唯一剩下的事情就是查询每个分区(并行,无in)并按bucket排序。在每个桶中,卡桑德拉可以按时间戳排序。最后一步是按存储桶顺序(或反向存储桶顺序)处理这些事件
关于“数据+小时”问题,您可以使用bucketing技巧,也可以使用“数据+小时+四分之一小时”。以下是我对类似问题的一些建议:
HTH.感谢xmas79提供的宝贵建议。让我试试你的方法。在类似的场景中,我们将分钟信息放入分区键