我正在开发一个交付应用程序,我想得到的管理员分析计数(订单数,订单数与签证支付等..)。我试图读取所有的文档并获得快照计数,但我想出这将花费我大量的读取,如果数据集很大,它会减慢我的应用程序。所以我创建了一个名为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';
});
1条答案
按热度按时间gopyfrb31#
我创建了一个云函数来监听文档创建,并在counts集合中的users文档中增加count字段。
这确实是满足您需求的最佳解决方案之一。请注意,如果写入“主集合”的频率(即如果计数器文档的更新次数超过每秒一次,您可以使用一组distributed counters。
我想知道它是否会花我一大笔钱
每次创建文档时,更新计数器的成本对应于一次Firestore写入和一次Cloud Function调用(以及可能的一些出站网络成本,具体取决于Firestore数据库和Cloud Function的位置,请参阅here和此处)。会不会花“一大笔钱”?这完全取决于在“主集合”中创建的文档数量以及您希望读取这些计数器的次数。
如果您每年阅读这些计数器一次,查询5个集合的所有文档可能会更实惠。但是如果你每天读一次或者每周读一次,并且这些集合有“很多文档”,那么像你这样使用云函数可能会更实惠。这取决于你做数学,以评估首选的方法,根据一些数字,你是唯一一个知道(或唯一一个能够估计)。