【问题标题】:Asynchronously Paginating in CassandraCassandra中的异步分页
【发布时间】:2015-12-22 16:31:33
【问题描述】:

通过 Web 应用程序中的异步调用对 Cassandra 中的表进行分页的有效方法是什么?

我知道您可以拉出比页面大小多一行并将该值发送到客户端,以便他们可以将其用作下一次调用的起点,但这将 Cassandra 和客户端紧密结合在一起。

对于这种情况有更好的做法吗?

【问题讨论】:

    标签: pagination cassandra


    【解决方案1】:

    TL;DR;就在这里。使用页面状态。

    看看这里:Results pagination in Cassandra (CQL) 和这里:http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0

    值得解释的是,当使用 Cassandra 2.0+ 自动分页时,作为响应,您将获得页面结果 + 当前页面状态 + 下一页状态。这些页面状态是字节数组。要获得下一页,您只需像往常一样调用结果,但您包括页面状态。

    注意:页面状态不受修改保护。您可能不想将其公开给客户端,因为修改页面状态可能会返回特定用户无法访问的数据。

    【讨论】:

    • 谢谢,但实际上没有办法将下一页状态发送给客户端,对吧?
    • 嗯,有一些解决方法 - 将其存储在服务器端的用户缓存中,仅将 id 发送给客户端或对其进行加密并发送。但是,我不知道任何简单的方法。顺便提一句。我确定我在某处读过页面状态不受修改保护。但是现在,这里:datastax.github.io/java-driver/features/paging 被写成“请注意,分页状态只能在完全相同的语句(相同的查询字符串,相同的参数)中重复使用。如果您尝试修改其内容或使用不同的语句重复使用它,则驱动程序将引发错误。”。
    • 最好单独问一个关于页面状态的问题 - 它是如何工作的(这些字节是什么)以及向外部用户公开它是否安全。
    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2018-08-13
    • 2015-02-05
    • 2016-02-03
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多