【问题标题】:Firestore count number of documentsFirestore 计数文档数
【发布时间】:2020-12-01 09:59:24
【问题描述】:

如果我有一个采用以下结构的 Firestore 文档:

在我的网络应用中,我想显示关注者的数量。如果我只做整个followers 子集合的get()。就读取操作而言,这将是昂贵的。我想到了以下解决方案:

拥有一个计数器文档和一个计数器字段,每次使用云功能在followers 集合中创建文档时,计数器字段都会递增。但是对于该计数器,每个文档每秒写入一次的限制。拥有followers 集合和每个关注者的每个文档的想法是避免每秒写入一次的限制(感谢 Doug Stevenson 的博客:The top 10 things to know about Firestore when choosing a database for your app)。

我能想到的唯一解决方法是使用分布式计数器扩展。但从我目前阅读的情况来看,该计数器仅适用于前端 SDK。我可以在云功能或 node.js 后端使用扩展来增加关注者计数器吗?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    “每秒每个文档写入一次”是一个指导方针,而不是硬性规定,所以我强烈建议不要立即挂断电话。

    再一次,如果您认为您需要计算的数量始终超过单个文档中的数量,您的选择是:

    1. 保留一个分布式计数器,如distributed counters 上的文档所示。

    2. 把柜台放在别的地方。例如,我通常将计数器保存在实时数据库中,它具有更高的写入吞吐量(但每个分片的读取并发性更低)。

    【讨论】:

    • 好吧有道理。如果在一秒钟内有多个写操作。只有一个成功吗?其余的都失败了?还是其余的排队,最终会成功?
    【解决方案2】:

    但从我目前的阅读来看,该计数器仅适用于前端 SDK。

    那不是真的。该扩展适用于对 Firestore 的任何查询。

    我能否在云功能或 node.js 后端使用扩展来增加关注者计数器?

    该扩展通过监视添加到集合中和从集合中删除的文档来工作。变化从何而来并不重要。您仍然可以从任何能够查询计数器文档的代码中使用计算出的计数器。

    【讨论】:

    • 啊好吧,我以为我只能在前端运行它。那我试试看。谢谢。顺便说一句,中篇文章不错。
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 2021-12-29
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2021-01-20
    • 2018-04-22
    相关资源
    最近更新 更多