如何在卡桑德拉柜台排序?

时间:2013-01-22 09:21:10

标签: sorting cassandra counter

假设我有一个论坛软件,我想根据它拥有的视图数量对线程进行排序。视图将存储在柜台中。

有关系数据库的经验,我认为这很容易解决,事实证明并非如此。我已经考虑创建一个大型行,其中列是计数器(因此被排序),但由于单行只能存储在单个节点上,因此这不可行(比使用Cassandra要好)。

如何在Cassandra中按计数器列排序?

3 个答案:

答案 0 :(得分:3)

您无法对大数据进行排序。这是基本假设之一。

你可以在cassandra上排序的唯一东西是cassandra用来存储数据的东西 - 行键和列键。

从普通SQL迁移到NoSQL,您必须放弃能够对数据进行排序/连接的概念。它(通常)在大数据实现中是不可能的。

答案 1 :(得分:2)

我在这里回答了类似的问题:https://stackoverflow.com/a/19147031/276949

该方法确实是一种使用Cassandra的非正统方式 - 它从未被设计用于这样的查询。

答案 2 :(得分:1)

要更新此问题: Korya是正确的,你不能假设BigData的所有NoSQL都不能排序(MongoDB可以排序,它是NoSql)。

关于Cassandra本身:您可以在复合键内的分区键之后对主键的任何给定元素进行排序:

实施例: Primary Key ((A),B,C,D);

A是您的分区键。 B,C,D是复合键的一部分,现在可以按ASC(默认)或DESC进行排序。如果你想在最新的(即时间)中自然地想要一些东西,那么你可以在你的模式中指定它: WITH CLUSTERING ORDER BY (media_type_id ASC,media_id ASC);

关于计数器的问题: 你不能在cassandra里面对计数器进行排序,因为计数器需要是KEY的一部分而且密钥是唯一的。

正如马丁所指出的那样,eBay的白页示例解释了这个解决方案,他们解释了两张表用于跟踪。