【问题标题】:How to avoid Firestore document write limit when implementing an Aggregate Query?实现聚合查询时如何避免 Firestore 文档写入限制?
【发布时间】:2020-05-14 14:21:02
【问题描述】:

我需要跟踪照片集中的照片数量。所以我想实现链接文章中详细介绍的Aggregate Query

我的计划是让一个云函数在创建或删除照片文档时运行,然后根据需要增加或减少聚合计数器。

这会起作用,但我担心会遇到 1 个写入/文档/秒的限制。假设用户在一次导入操作中添加了 10 张图像。即或多或少同时执行 10 次 Cloud Function,因此或多或少同时向聚合查询文档写入 10 次。

环顾四周,我看到几个提到 (like here) 1 写入/文档/秒的限制是针对持续的恒定负载周期,而不是短脉冲。这听起来令人放心,但如果您只需要继续说“有人说在 Google 网上论坛上没问题”,就不足以让雇主相信您选择 DB 是一个安全可靠的选择。是否有任何官方消息表明短写入突发是可以的,如果是,“短突发”的定义是什么?

或者是否有其他方法来维护聚合查询结果文档,而不会使所有聚合文档在所有聚合文档中都受到非常严格的 1 写入/秒限制?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    如果您认为您会看到每秒一次以上的持续写入速率,请考虑将聚合划分为分片。在这种情况下,您有 N 个聚合文档,每个客户端/函数随机选择一个来写入。然后当客户端需要聚合时,它会读取所有这些子文档并将它们添加到客户端。这种方法在 distributed counters 上的 Firebase 文档中得到了很好的解释,也是 distributed counter Firebase 扩展中使用的方法。

    【讨论】:

    • 谢谢。是的,这是减少此问题影响的一种方法,但它不会让它消失。如果您“病毒式传播”并且突然拥有比平时更多的流量,您仍然冒着达到写入限制的风险。所以,在我将你标记为正确答案之前,我会稍等片刻,因为我希望那里的某个人能够得到一个无需开发干预就可以扩大规模的答案。
    • 除此之外,我想分享这个entry in github 关于firestore 的限制:>这不是我们人为强制执行的硬限制,而是我们希望您在何时注意使用 Cloud Firestore,因为它是系统的基本限制。如果您对同一文档维持超过 1QPS 的写入,您最终将遇到此限制,并且您的写入将被拒绝。在您的情况下,后端应该能够将请求排队并以可持续的速率执行它们。
    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2018-08-06
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多