在Firebase

时间:2016-10-05 15:26:38

标签: firebase firebase-realtime-database nosql

我正在努力创建一个社交网络式的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;
});

由于交易在参考上运作,我怎么能"喜欢"原子地在多个地方的帖子?

1 个答案:

答案 0 :(得分:5)

对于您的用例,在写入队列任务的节点时,您需要使用throttle on the client的firebase-queue。

您的扇出发生在工作节点中,您可以根据承诺成功/失败构建补偿模型。

队列是保证工作完成并简化客户端代码的唯一方法。

参考:ways to live without transactions

======

编辑:2017年3月引入了Firebase的云功能,现在是实施扇出的推荐方法。