firebase 计算一个或多个Firestore集合中文档数量的最有效方法

wr98u20j  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在开发一个交付应用程序,我想得到的管理员分析计数(订单数,订单数与签证支付等..)。我试图读取所有的文档并获得快照计数,但我想出这将花费我大量的读取,如果数据集很大,它会减慢我的应用程序。所以我创建了一个名为count的集合,我创建了一个云函数来监听文档创建和递增count集合中的用户文档中的count字段,它工作得很完美,但我想知道它是否会花费我一大笔钱,如果有更好的解决方案。注:我会听5+集合
以下是我的函数:

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';
});
gopyfrb3

gopyfrb31#

我创建了一个云函数来监听文档创建,并在counts集合中的users文档中增加count字段。
这确实是满足您需求的最佳解决方案之一。请注意,如果写入“主集合”的频率(即如果计数器文档的更新次数超过每秒一次,您可以使用一组distributed counters
我想知道它是否会花我一大笔钱
每次创建文档时,更新计数器的成本对应于一次Firestore写入和一次Cloud Function调用(以及可能的一些出站网络成本,具体取决于Firestore数据库和Cloud Function的位置,请参阅here和此处)。会不会花“一大笔钱”?这完全取决于在“主集合”中创建的文档数量以及您希望读取这些计数器的次数。
如果您每年阅读这些计数器一次,查询5个集合的所有文档可能会更实惠。但是如果你每天读一次或者每周读一次,并且这些集合有“很多文档”,那么像你这样使用云函数可能会更实惠。这取决于你做数学,以评估首选的方法,根据一些数字,你是唯一一个知道(或唯一一个能够估计)。

相关问题