【问题标题】:cassandra result paginationcassandra结果分页
【发布时间】:2015-08-08 12:39:05
【问题描述】:

假设,我有一个应用程序,它从 cassandra 读取数据,并以每页 10 或 20 行的行块向用户显示它们。有没有办法在 cassandra 中有效地做到这一点?假设,我有一个表 'ks1.cf1',分区键为 'pk',聚类列为 'ck',每个分区有 1000 多行,我想一次向用户显示每个分区 10 行。一种方法是运行

SELECT * FROM ks1.cf1 LIMIT 10; 并获取最后一行并根据聚类列('ck'的值)进行不等式并再次限制结果,如

SELECT * FROM ks1.cf1 WHERE ck > value_in_last_row LIMIT 10;

这是一种有效的方法,还是多次运行同一个查询会产生大量开销?结果分页在 cqlsh 中是如何工作的,cql 或 java 驱动程序是否支持类似的东西?此外,使用 LIMIT 是否会获取整个分区并仅显示请求的记录数? 另外,如果我要获取多个分区并希望一次显示 n 个分区,我该如何对一般查询执行相同的操作?

【问题讨论】:

    标签: pagination cassandra cql cql3


    【解决方案1】:

    如果您只需要跳转到下一页,这很容易。最新的 Java 驱动程序版本(2.0.10.1 和 2.1.6)公开了查询的分页状态,请参阅文档 here

    另一方面,偏移量查询没有简单的解决方案(例如直接跳转到第 20 页)。 Cassandra 没有开箱即用地实现它们,请参阅CASSANDRA-6511

    【讨论】:

    • 那么,如果我想将一组结果作为页面显示给最终用户,除了使用分页状态,我别无选择?另外,这只是java驱动程序中可用的功能吗?我正在使用 gocql 驱动程序,想知道 CQL3 是否提供了任何相同的功能。
    • 您可以使用 WHERE token(ck) > token(last_seen_value) 手动执行此操作,但如果您的分区比您的页面大(您还需要比较集群列值),这会变得复杂。
    • PS -- 我对gocql不熟悉,但是分页状态从CQL原生协议v2开始就可以使用了,所以任何驱动都可以暴露它。
    猜你喜欢
    • 2015-01-01
    • 2017-10-18
    • 2015-10-19
    • 2015-02-13
    • 2017-05-14
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多