首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cassandra中按键排序

问在Cassandra中按键排序
EN

Stack Overflow用户
提问于 2011-08-02 17:22:06
回答 2查看 4.4K关注 0票数 4

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

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

我尝试使用RangeSlicesQuery,分页可以很好地处理这个查询,但结果不会以任何方式排序。

我绝对是Cassandra的初学者,谁能给我举一个简单的例子,说明如何按键对列族进行排序?如果你需要更多关于我的努力的细节,请询问。

编辑:

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-02 18:10:32

引用Cassandra - The Definitive Guide

根据compare_with的值按排序顺序存储

列名。另一方面,行以分区程序定义的顺序存储(例如,对于RandomPartitioner,它们是随机顺序的,等等)。

我猜您使用的是RandomPartitioner

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

在以下情况下,您可能应该使用OrderPreservingPartitioner (OPP)

因此,

行按键顺序存储,从而使数据的物理结构与您的排序顺序一致。

要意识到OPP的低效。

(2014-03- 07编辑)

重要信息:

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

这是一个系统范围的设置。您可以在cassandra.yaml中进行设置。参见this doc。同样,OPP也是非常不受欢迎的。本文档是针对1.1版的,您可以看到它已被弃用。它很可能是从最新版本中删除的。如果你确实想要使用OPP,你可能想要重新审视这个架构。

票数 5
EN

Stack Overflow用户

发布于 2011-10-26 03:13:36

或者在相同的列族中创建一个名为"meta:userNames“的行,并将所有用户名作为查找散列。差不多吧。

代码语言:javascript
复制
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,它提供对其数据的快速随机访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6909826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档