【问题标题】:Firestore: Paging using cursorsFirestore:使用游标进行分页
【发布时间】:2017-10-27 12:32:45
【问题描述】:

为什么服务器库(java/nodejs 等)不支持查询分页。我正在寻找通过服务器端的大型数据集进行分页。类似于 GAE/J,最好使用 websafe cursor,可以发送到客户端。

提前致谢,

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    服务器 SDK 确实支持分页之类的功能,但有一些注意事项。

    Web、Android 和 iOS SDK 允许您使用文档快照作为查询的光标(使用 startAfter),这与您期望的一样。服务器 SDK 需要指定一组 。如果你的价值观是独一无二的,这很好;如果不是,则不安全,因为具有重复项的值可能是当前批次中的最后一个元素:

    current: 998, 999, 1000 | next: 1000, 1001, 1002
    

    并且使用startAfter 将跳过下一批结果的第一个元素(1000)。您可以通过使用 startAt 并合并结果来解决此问题,但如果重复值的数量超过您指定的批量大小,您可能会卡住:

    current: 1000, 1000, 1000 | next: 1000, 1001, 1002
    

    这里有更多关于 Cloud Firestore 中 paginating data with query cursors 的信息。

    【讨论】:

    • 谢谢威尔。我正在考虑以下分页。按时间戳对集合进行排序并将限制设置为 比如说 100,并使用最后一个元素的时间戳作为下一个查询的 startAt。你觉得这种方法有什么问题吗?再次感谢您的帮助。
    • 嘿,很高兴为您提供帮助。两个问题: 1. 我猜这不太可能,但你不会有 100 个相同的时间戳,对吧?否则你会遇到我描述的第二个问题。 2. 注意时间戳:在大容量下,您可能会遇到顺序值写入的限制(每秒 500 个,firebase.google.com/docs/firestore/quotas)。
    • (如果您认为这是一个答案,请不要忘记将其标记为答案。:))
    • >> 注意时间戳:在大容量下,您可能会遇到顺序值写入的限制(每秒 500 次)这是一个很好的问题。我以前没有注意到这一点。谢谢
    • 我正在使用 Java 服务器 SDK,看起来像基于光标的分页(startAfter(QueryDocumentSnapshot) 有效。这是新事物吗?Firestore 文档仍然说不支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2021-03-31
    • 2018-04-23
    • 2012-10-20
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多