0

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

1 回答 1

2

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

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

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

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

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

于 2021-01-14T14:55:57.697 回答