【问题标题】:Cassandra BETWEEN & ORDER BY operationsCassandra BETWEEN & ORDER BY 操作
【发布时间】:2011-11-07 12:24:11
【问题描述】:

我想在 Cassandra-0.7.8 上执行 SQL 操作,例如 BETWEEN、ORDER BY 和 ASC/DSC 顺序。

据我所知,Cassandra-0.7.8 没有直接支持这些操作。请告诉我有没有办法通过调整二级索引来完成这些?

下面是我的数据模型设计。

Emp(KS){
    User(CF):{
         bsanderson(RowKey): { eno, name, dept, dob, email }
     prothfuss(RowKey): { eno, name, dept, dob, email }
}
}

查询:

 - Select * from emp where dept='IT' ORDER BY dob ASC. 
 - Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.

提前致谢。

问候,

Thamizhananl

【问题讨论】:

  • 您是否使用 CQL(Cassandra 查询语言)进行查询?

标签: cassandra


【解决方案1】:
Select * from emp where dept='IT' ORDER BY dob ASC.

您可以使用内置的二级索引选择“dept”列具有特定值的行。但是,将按照分区器(RandomPartitioner 或 OrderPreservingPartitioner)确定的顺序返回行。要按 DOB 等任意值排序,您需要在客户端进行排序。

或者,您可以直接支持此查询,方法是为每个部门设置一行,为每个员工设置一列,按 DOB 键控(并因此排序)。但要小心共享生日!而且您仍然需要后续查询来检索所选员工的其他数据(您的 SELECT * 的结果),除非您进行非规范化以便将所需的数据也存储在索引中。

Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.

Cassandra 中的二级索引查询至少需要一个相等项,所以我认为您可以执行 dept='IT' AND eno >=X AND eno

您可以通过创建自己的索引行来做到这一点,每个员工都有一个列,以员工编号为键,并带有适当的比较器,以便所有列自动按员工编号顺序排序。然后,您可以对该行进行范围查询以获取匹配员工的列表 - 但您需要进一步查询来检索每个员工(dob 等)的其他数据,除非您进行非规范化以便所需的数据也存储在索引中.您仍然需要在客户处进行 dob 订购。

【讨论】:

  • 非常感谢 DNA。我将试验这些想法。
【解决方案2】:

据我所知,当您创建列族时,列将按比较器排序,您可以使用 clustring 键对您的意见进行排序 并且列族中的行将由分区器排序 我建议你阅读这篇论文
Cassandra 权威指南第 6 章

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2017-05-30
    • 2019-03-15
    • 1970-01-01
    • 2019-06-26
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多