最近Firebase引入了Cloud Functions。
在我的情况下,此功能对计算数据库中的元素非常有用。
Firebase发布了一个sample code to count elements,但我问自己一些关于大数据的问题。
在我们的示例中,我们认为我们需要对帖子进行计算。
在示例代码中,每个新的类似,函数计数都喜欢当前帖子并更新计数。
您认为它对大数据来说是一个很好的解决方案吗? (例如,如果我们有1M喜欢的话)
提前谢谢!
答案 0 :(得分:4)
同意函数示例中的代码不适用于大型数据集。
很长一段时间以来,我在我的柜台上采用了两步法:
所以情况#2的内存绑定与当前代码相同。但是案例#1触发了儿童写作,因此内存消耗更少。
代码:
// Keeps track of the length of the 'likes' child list in a separate property.
exports.countlikechange = functions.database.ref("/posts/{postid}/likes/{likeid}").onWrite((event) => {
var collectionRef = event.data.ref.parent;
var countRef = collectionRef.parent.child('likes_count');
return countRef.transaction(function(current) {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
}
else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
});
// If the number of likes gets deleted, recount the number of likes
exports.recountlikes = functions.database.ref("/posts/{postid}/likes_count").onWrite((event) => {
if (!event.data.exists()) {
var counterRef = event.data.ref;
var collectionRef = counterRef.parent.child('likes');
return collectionRef.once('value', function(messagesData) {
return counterRef.set(messagesData.numChildren());
});
}
});
我还在回购邮件的PR中提交了这个。
答案 1 :(得分:1)
请参阅functions-samples中的示例。
给出类似于此的数据结构:
SELECT CASE WHEN tableA.user_type = 1 THEN tableB.user_type
WHEN tableA.user_type = 2 THEN tableC.user_type
END as user_type
FROM tableA
INNER JOIN tableB
ON tableA.id = tableB.id
INNER JOIN tableC
ON tableA.id = tableC.id
这个功能可以解决问题:
/functions-project-12345
/posts
/key-123456
likes_count: 32
/likes
user123456: true
user456789: true
user786245: true
...
请注意,此代码的版权归Google所有,并获得了apache许可。 See the code了解更多详情。