【问题标题】:Ordered Data with Cassandra RandomPartitionerCassandra RandomPartitioner 的有序数据
【发布时间】:2011-10-12 05:41:56
【问题描述】:

我有大约 10 亿条数据想要存储在 Cassandra 中。数据项按时间排序,我要做的主要查询之一是按顺序查找两个时间范围之间的项目。如果可能的话,我真的更喜欢使用 RandomParititioner。有没有办法在 Cassandra 中做到这一点?

起初,由于我来自 SQL,我认为我应该将每个事件创建为一行,但后来我想到我的想法错误,我应该真正使用列。 Cassandra 中的列似乎是有序的,但我对它们的有序性感到困惑。如果我使用时间作为列名,有没有办法让所有列按顺序从一个时间到另一个?

我查看的另一件事是二级索引的 0.7 功能,但我很难找到有关是否可以使用这些功能按顺序查看一系列内容的文档。

我想要的只是这个 SQL 的 Cassandra 等效项:“Select * from Stuff where date > X and date

【问题讨论】:

    标签: nosql cassandra


    【解决方案1】:

    分区器只影响环周围的键分布,而不影响键中列的顺序。列总是根据为列族定义的列比较器排序。

    您可以使用指定 SliceRange 的 SlicePredicate 调用 get_slice,以获取范围内键的所有列。

    要对数据建模,您可以为每天(或合适的时间分片)创建 1 行,并为每条数据创建一个列。类似的,

    "yyyy-mm-dd" : {  #key, one for each day
        timeStampMillis1:dataid1 : "value1" # one column for each piece of data
        timeStampMillis2:dataid2 : "value2" 
        timeStampMillis3:dataid3 : "value3" 
    }
    

    列名应该是二进制的,使用二进制比较器。前 8 个字节是时间戳,其余字节是数据的 id。

    假设 X 和 Y 在同一天,要查找 X 和 Y 之间的所有项目,请在日期键上执行 get_slice,使用带有 SliceRange 的 SlicePredicate 指定 X 的开始和 Y+1 的结束. start 和 finish 都是 8 个字节的字节数组。

    要查找多天的数据,请从多个键中读取。

    【讨论】:

    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 2023-03-20
    • 2011-11-26
    • 2011-01-13
    • 2015-03-07
    • 2013-06-09
    • 2013-04-17
    • 2012-11-05
    相关资源
    最近更新 更多