Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉数据建模问题_Cassandra_Datastax Java Driver - Fatal编程技术网

Cassandra 卡桑德拉数据建模问题

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

我们希望使用ApacheCassandra存储从领域时间传感器数据收集的大数据。我们开发了一个物联网平台,能够每秒处理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”的所有传感器数据的所有结果,如“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提供的宝贵建议。让我试试你的方法。在类似的场景中,我们将分钟信息放入分区键