繁体   English   中英

对一个或多个 Firestore 集合中的文档进行计数的最有效方法

[英]Most efficient approach to count documents in one or more Firestore collection(s)

我正在开发一个交付应用程序,我想获取管理员分析的计数(订单数量,通过签证支付的订单数量等......)。 我试图阅读所有文档并获取快照计数,但我发现这会花费我大量的阅读时间,如果数据集很大,它会减慢我的应用程序。 因此,我创建了一个名为 counts 的集合,并创建了一个云 function 来侦听文档创建并增加计数集合中用户文档中的计数字段,它运行良好,但我想知道它是否会花费我一大笔钱如果有更好的解决方案。 注意:我会听 5+ collections

这是我的 function:

const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

    var firestore = admin.firestore();
 // Listens for any document created in the users collection
exports.createUser = functions.firestore
    .document('users/{userId}')
    .onCreate((snap, context) => {
 firestore.collection('counts').doc('users').update({ count: admin.firestore.FieldValue.increment(1) })
return 'done';
});

我创建了一个云 function 来监听文档创建并增加计数集合中用户文档中的计数字段。

这确实是满足您要求的最佳解决方案之一。 请注意,如果写入“主集合”(即 5 个以上集合)的频率非常高,以至于计数器文档的更新次数可能超过每秒一次,您可以使用一组 分布式计数器

我想知道这是否会花费我一大笔钱

每次创建文档时,更新计数器的成本对应于一次 Firestore 写入和一次 Cloud Function 调用(可能还有一些出站网络成本,具体取决于您的 Firestore 数据库和 Cloud Function 的位置,请参见此处此处)。 会不会花“一大笔钱”? 这完全取决于在“主集合中创建的文档数量以及您想要读取这些计数器的次数。

如果你一年读一次这些计数器,查询 5 collections 的所有文档可能会更实惠。 但是,如果您每天或每周阅读一次,并且那些 collections 有“很多文档”,那么使用云 Function 可能会更实惠。 根据您是唯一知道(或唯一能够估计的)的一些数字,您可以进行数学计算以评估首选方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM