【问题标题】:How do I use paginate with 'cursors' in N1ql?如何在 N1ql 中使用带有“光标”的分页?
【发布时间】:2019-03-26 10:18:16
【问题描述】:

我需要对 Couchbase N1ql 查询进行分页。

我是aware of paginationOFFSET,但是指定起点和终点更有效。

我看到了关于 startkey_docid 的文档,但没有关于如何在 N1ql 中使用它。

如何在 N1ql 中使用光标或类似的东西进行分页?

【问题讨论】:

    标签: couchbase n1ql database-cursor


    【解决方案1】:

    查看“键集分页”,这是一种通过利用索引而不是使用offset 来提高分页性能的通用技术。关于该主题的一篇常被引用的文章是 Markus Winand 的“We need tool support for keyset pagination”。

    有关使用 N1QL 的 Couchbase 特定示例,请参阅 Keshav Murthy 的文章“Database Pagination: Using OFFSET and Keyset in N1QL”。

    【讨论】:

    • 有道理,但是 startkey_docid 呢?这似乎是一种不同的方法,也很有效。我可以使用吗?
    • @JoshuaFox startkey_docid 仅用于查看,不适用于 N1QL。
    【解决方案2】:

    N1QL 不支持游标。在幕后,发送到查询引擎的每个查询都是一个单独的 HTTP 请求。查询之间根本没有连续性,因此不支持游标的概念。

    【讨论】:

    • 好的,那我该怎么做分页(除了OFFSET,效率低下)?
    • 如果你打算使用数据库进行分页,OFFSET 和 LIMIT 是你唯一的选择。如果这样做不行,您将不得不将整个结果拉入更高级别的系统(可能是应用服务器?)并从那里分页。您可以通过获取 doc id 而不是完整的文档并仅在需要时填写文档内容来减少第二个选项的重量。
    • 谢谢。对于几乎所有应用程序来说,分页似乎都是一个重要的特性。你知道为什么这里只提供 OFFSET 吗? Couchbase 确实有 startkey_docid,所以显然 Couchbase 的设计者都知道这一点。
    • Couchbase 确实不支持游标,但“键集分页”可能比使用 OFFSET 和 LIMIT 分页提供更好的性能。我在另一个答案中放了一些链接。
    • 支持 startkey_docid 的 REST API 对于大数据集效率非常低,它真的只对获取前一千个左右的键有用。 N1QL 可以使用“主索引”,它允许您使用“meta().id > x 和 meta().id
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2015-05-18
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2022-10-09
    相关资源
    最近更新 更多