我正在努力创建一个社交网络式的Feed,并且一直关注Firebase博客上的guide,其中包含我的博客帖子"整个数据库。
这很有意义,适用于使用update()方法与这些帖子进行交互。但是,我不清楚如何在多个地方以原子方式执行交易。
例如,我想添加“'喜欢'一个帖子。如果我要在一个位置发布该帖子,我的代码将如此:
var postRef = firebaseDB.ref("posts/" + postID + "/likes");
postRef.transaction(function(likes) {
return (likes || 0) + 1;
});
由于显而易见的原因,下面的解决方案是不原子。
var postRef1 = firebaseDB.ref("posts/" + postID + "/likes");
postRef1.transaction(function(likes) {
return (likes || 0) + 1;
});
var postRef2 = firebaseDB.ref("user/" + userID + "/posts/" + postID + "/likes");
postRef2.transaction(function(likes) {
return (likes || 0) + 1;
});
由于交易在参考上运作,我怎么能"喜欢"原子地在多个地方的帖子?
答案 0 :(得分:5)
对于您的用例,在写入队列任务的节点时,您需要使用throttle on the client的firebase-queue。
您的扇出发生在工作节点中,您可以根据承诺成功/失败构建补偿模型。
队列是保证工作完成并简化客户端代码的唯一方法。
参考:ways to live without transactions
======
编辑:2017年3月引入了Firebase的云功能,现在是实施扇出的推荐方法。