【问题标题】:How to sort by counter in Cassandra?如何在 Cassandra 中按计数器排序?
【发布时间】:2013-01-05 11:34:07
【问题描述】:

假设我有一个论坛软件,我想按照它的浏览量对主题进行排序。视图将存储在计数器中。

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

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

【问题讨论】:

标签: sorting cassandra counter


【解决方案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 的一部分,并且密钥是唯一的。

正如 Martin 指出的,eBay 的白页示例所引用的解决方案解释说,使用两个表来跟踪。

【讨论】:

    【解决方案2】:

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

    您可以在 cassandra 上进行排序的唯一内容是 cassandra 用于存储其数据的内容 - 行键和列键。

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

    【讨论】:

    • 我可能会将我的论坛设置为在需要时使用 SQL,并尽可能使用 NoSQL。谢谢你的回答:)!
    • 我发现“NoSQL 世界中不能有排序/连接”的说法不准确。一般情况下是对的。但在许多情况下,这不是真的。至少当它们存储在同一个节点时,排序和连接是可能的。事实上,在 SQL 世界中,对数据进行分片是很常见的技术,这样 JOIN 查询就可以处理存储在同一节点上的数据。对于 cassndra 示例,按任意列对同一分区的行进行排序应该没有问题,因为所有行都位于同一节点上。
    猜你喜欢
    • 2012-02-10
    • 2012-01-15
    • 2011-10-18
    • 2017-12-16
    • 2013-07-01
    • 2016-12-31
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多