如何在Firebase中执行多地点更新时使用交易?

时间:2016-09-02 17:28:59

标签: firebase firebase-realtime-database

在我的Firebase数据库中,我需要一次写入两个位置。我有两个位置的规则,确保用户无法在不同时写入其他位置的情况下写入。

对这些位置之一的写入需要是递增/递减。当然,这必须通过事务来完成,否则我不能保证用户不会覆盖其他用户对同一节点的同时递增/递减更新。

问题是,我找不到任何关于将多位置更新与事务相结合的文档。这不可能吗?

2 个答案:

答案 0 :(得分:8)

没有。事务在单个节点上运行。

这意味着如果要运行多位置事务,则必须在"最低级别共享节点上运行该事务"在树上。这几乎不是一个好主意。

另一种方法是使用服务器端安全规则保护您的多位置写入。有关此示例,请参阅Is the way the Firebase database quickstart handles counts secure?,它基本上使用安全规则构建比较和设置操作。

答案 1 :(得分:2)

现在可以通过引入ServerValue.increment()

将多路径更新与事务结合起来

示例:

Map<String, Object> postLikeUpdate = new HashMap<>();
postLikeUpdate.put("postLikedBy/" + postId + "/" + userId, true);
postLikeUpdate.put("likesCount/" + postId, ServerValue.increment(1));
FirebaseDatabase.getInstance().getReference().updateChildren(postLikeUpdate);

Link to release notes