假设我有一个论坛软件,我想按照它的浏览量对主题进行排序。视图将存储在计数器中。
在关系数据库方面有经验,我认为这很容易解决,但事实并非如此。我曾考虑过创建一个大行,其中的列是计数器(因此被排序),但由于单行只能存储在单个节点上,这并不可行(超过了使用 Cassandra 的要点)。
如何按 Cassandra 中的计数器列排序?
你不能对大数据进行排序。这是基本假设之一。
您可以在 cassandra 上进行排序的唯一内容是 cassandra 用于存储其数据的内容 - 行键和列键。
从普通 SQL 迁移到 NoSQL,您必须放弃能够对数据进行排序/连接的概念。这只是(通常)在大数据实现中是不可能的。
要更新这个问题: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 的一部分,并且密钥是唯一的。
正如 Martin 所指出的,eBay 的白页示例所引用的解决方案解释说,使用两个表来跟踪。