当前位置:  开发笔记 > 数据库 > 正文

使用Cassandra RandomPartitioner订购数据

如何解决《使用CassandraRandomPartitioner订购数据》经验,为你挑选了1个好方法。

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

起初,因为我来自SQL,我假设我应该将每个事件创建为一行,但后来我发现我正在考虑错误的方式而且我应该使用列.Cassandra中的列似乎是有序的,但我对它们的有序性感到困惑.如果我使用时间作为列名,有没有办法让我按顺序将所有列从一次到另一次?

我看到的另一件事是二级索引的0.7特性,但是我找不到文档是否可以使用这些来按顺序查看一系列内容.

我想要的只是这个SQL的Cassandra等价物:"选择*来自Stuff,其中日期> X和日期

1> sbridges..:


分区程序仅影响环周围密钥的分布,而不影响密钥中列的顺序.始终根据为列族定义的列比较器对列进行排序.

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

要为数据建模,您可以为每天创建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,使用SlicePredicate和SliceRange指定X的开始和Y + 1的结束.开始和结束都是8字节的字节数组.

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


有关此数据模型的概述,请参阅http://blog.insidesystems.net/basic-time-series-with-cassandra
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有