Cassandra 按计数排序结果

Posted

技术标签:

【中文标题】Cassandra 按计数排序结果【英文标题】:Cassandra sorting results by count 【发布时间】:2012-02-10 10:51:03 【问题描述】:

我正在记录用户搜索各种关键字的数据。我想要生成一份用户搜索过的所有唯一关键字的报告,按每个关键字的搜索次数按升序和降序排序。

这是可以使用 Cassandra 建模的东西吗?如果可以,模型会是什么样子?

谢谢!

【问题讨论】:

【参考方案1】:

根据eBay tech blog,将您的计数器值存储在密钥本身中并不罕见。因此,为了存储 Bob、Ken 和 Jimmy 登录网站的次数,单行如下所示:

logins: [(0001_Bob,''), (0002_Bob, ''), ..., (0010_Ken, ''), (0012_Jimmy, ''), ...]

请注意,您的键将自动在尾端以最高计数自行排序,这接近于恒定时间查找。

请注意,每次您的用户登录时,都会创建一个新的列键。您必须跟踪另一行中的登录次数,以便快速查找到目前为止已发生的登录次数以及下一个键应具有的整数值:

login_count: [(Bob, 2), (Ken, 10), (Jimmy, 10), ...]

【讨论】:

我真的不想站在需要支持这种方法的人的立场。【参考方案2】:

您可以将每个关键字用作行键,并为每行使用一个计数器列来跟踪搜索次数。然后,您可以通过扫描每一行并读取计数器来生成报告。 Cassandra 不会对结果进行排序(假设您使用默认的 RandomPartitioner 而不是 OrderPreservingPartitioner),但考虑到可能只有几万个关键字,您可以在客户端轻松地对它们进行排序。

【讨论】:

以上是关于Cassandra 按计数排序结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL:按条件从不同表中按计数排序

如何按列值的计数进行分组并对其进行排序?

SUM 行、返回计数和按日期排序

MySQL Select 语句 - 两个表,按其他表的计数对一个表进行排序

数据框:如何在 Scala 中分组/计数然后按计数排序

如何在 cassandra 中通过更新时间获得最后 n 个结果?