假设我有一个键空间,它有一个存储用户对象的列族,这些对象的键是用户名。
如何使用Hector获取按用户名排序的用户列表?
我尝试使用RangeSlicesQuery,分页可以很好地处理这个查询,但结果不会以任何方式排序。
我绝对是Cassandra的初学者,谁能给我举一个简单的例子,说明如何按键对列族进行排序?如果你需要更多关于我的努力的细节,请询问。
编辑:
结果没有排序,因为我在cassandra.yaml中使用了默认的RandomPartitioner而不是OrderPreseveringPartitioner。
也许最好不要依赖于按键排序,而是使用二级索引。
发布于 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,你可能想要重新审视这个架构。
发布于 2011-10-26 03:13:36
或者在相同的列族中创建一个名为"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,它提供对其数据的快速随机访问。
https://stackoverflow.com/questions/6909826
复制相似问题