假设我有一个论坛软件,我想根据它拥有的视图数量对线程进行排序。视图将存储在柜台中。
有关系数据库的经验,我认为这很容易解决,事实证明并非如此。我已经考虑创建一个大型行,其中列是计数器(因此被排序),但由于单行只能存储在单个节点上,因此这不可行(比使用Cassandra要好)。
如何在Cassandra中按计数器列排序?
答案 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的白页示例解释了这个解决方案,他们解释了两张表用于跟踪。