【问题标题】:Sorted reviews pagination in cassandracassandra中的排序评论分页
【发布时间】:2014-01-28 09:19:31
【问题描述】:

我有一个 CF 评论,其中项目 ID 作为行键,评论 ID 作为列,评论对象 json 作为列值。

CF Reviews{
1234:
 234:{[1:"this is a review"],[2:23/12/14],[3:4]}
 567:{[1:"this is a review"],[2:24/12/14],[3:3]}

4567:
 345:{[1:"this is a review"],[2:23/12/14],[3:4]}
 876:{[1:"this is a review"],[2:24/12/14],[3:3]}
}

我想在每个项目 ID 上实现分页,但由于列数可能很大,我不想一次获取它们。 因此,我想设计一个 API,它可以采用 200 到 250 的数字范围,并根据日期或评级给我排序的评论。 我发现了一些关于此的帖子,但不幸的是没有一个有用。

【问题讨论】:

    标签: sorting cassandra comments review


    【解决方案1】:

    Cassandra 中的分页不适合弱者。如果你想让向前和向后翻页成为可能,你需要做一些技巧,比如总是阅读你感兴趣的切片之前的列和之后的列,这样你就可以确定你什么时候在开头或结尾。

    几年前我写了一篇博客文章,概述了如何做到这一点:http://architecturalatrocities.com/post/13918146722/implementing-column-pagination-in-cassandra

    不幸的是,实际上不可能进行传统的“显示第 40 到 60 项”类型的分页,因为 Cassandra 的行不是以这种方式编入索引的。你不能向 Cassandra 询问第 40 列。

    相反,您需要做的是(这是对我的博客文章的高级概述,此处无法重新发布)是从头开始并要求前 N + 1 列。如果你有 N + 1 列你不是在最后,所以你要求从第 (N + 1) 列开始的 N 列(例如,如果你在第一个结果中得到 a、b、f、h、g要求以 g) 开头的列。重复直到你没有得到 N + 1 列,因为这意味着你在最后。

    支持向后分页有点复杂。您需要再请求一列,并进行更多边界检查。

    【讨论】:

    • 谢谢,我已经想到了。但我在这里面临的问题是我希望它们按日期或评级排序。我无法为我的列名设置日期/评级,因为相同的日期/评级可能有多个评论。即使附加评论 ID,它也不会被排序,因为它将使用 UTF-8 作为比较器。
    • 在这种情况下,你就不走运了。您的架构不支持您要执行的操作。
    猜你喜欢
    • 2018-10-01
    • 2019-08-07
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2012-05-04
    • 2016-01-24
    相关资源
    最近更新 更多