【问题标题】:Sort by key in Cassandra在 Cassandra 中按键排序
【发布时间】:2011-10-18 02:22:00
【问题描述】:

假设我有一个包含存储用户对象的列族的键空间,并且这些对象的键是用户名。

如何使用 Hector 获取按用户名排序的用户列表?

我尝试使用 RangeSlicesQuery,分页适用于该查询,但结果未以任何方式排序。

我是一个绝对的 Cassandra 初学者,谁能指出一个简单的例子来展示如何按键对列族进行排序?请询问您是否需要有关我的工作的更多详细信息。

编辑:

结果没有排序,因为我在 cassandra.yaml 中使用了默认的 RandomPartitioner 而不是 OrderPreseveringPartitioner。

可能最好不要依赖按键排序,而是使用二级索引。

【问题讨论】:

    标签: sorting cassandra hector


    【解决方案1】:

    引用Cassandra - The Definitive Guide

    列名按照 compare_with 的值排序存储。行, 另一方面,按分区器定义的顺序存储(例如, 使用 RandomPartitioner,它们的顺序是随机的,等等)

    我猜你使用的是RandomPartitioner

    ...以基本上随机的顺序返回数据。

    你应该在哪里使用OrderPreservingPartitioner (OPP)

    因此存储行 按键顺序,将数据的物理结构与您的排序顺序对齐。

    注意 OPP 的低效率。


    (2014 年 3 月 7 日编辑)
    重要提示:

    这个答案现在已经很老了。

    这是一个系统范围的设置。您可以在cassandra.yaml 中设置。见this doc。同样,OPP 非常不鼓励。本文档适用于 1.1 版本,您可以看到 已弃用。它很可能已从最新版本中删除。如果您确实想使用 OPP,您可能需要重新访问架构。

    【讨论】:

    • 当使用 OOP (OrderPreservingPartitioner) 时,键是按一些 PK 排序的,如果我要在 cassandra 表中插入新数据,这是否意味着它将新元素插入到正确的位置或将它度假吗?
    • 你如何将它用于表 OrderPreservingPartitioner?
    • 它是像键空间还是表的设置?
    【解决方案2】:

    或者在同一列族中创建一个名为“meta:userNames”的行,并将所有用户名作为查找哈希。类似的东西。

    Users {
        key: "meta:userNames" {david:david, paolo:paolo, victor:victor},
        key: "paolo" {password:"*****", locale:"it_it"},
        key: "david" {password:"*****", locale:"en_us"},
        key: "victor" {password:"*****", locale:"en_uk"}
    }
    

    首先查询meta:userNames 列(已排序)并使用它们来获取用户行。不要像在 SQL 驱动的数据库中那样尝试通过单个数据库查询来获取所有内容。使用 Cassandra 作为巨大的 Hash Map,它提供对其数据的快速随机访问。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2017-05-24
      • 2021-02-13
      • 2017-03-13
      • 1970-01-01
      • 2016-12-21
      • 2017-03-23
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多