首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用事务实时数据库将点从用户移动到另一个用户

使用事务实时数据库将点从用户移动到另一个用户
EN

Stack Overflow用户
提问于 2019-03-03 19:47:40
回答 1查看 27关注 0票数 0

使用firebase实时数据库,我想将点从用户移动到另一个用户,但为了避免冲突(可能用户同时从多个其他用户获得硬币),我必须使用事务。

我的数据结构:

代码语言:javascript
复制
{  
      uid-1:
             {
                points: 30
             },
        uid-2:
           {
              points:60
            }
}

所以我需要两个事务,一个减去uid-1,第二个增加uid-2

但我担心,如果一个交易成功,另一个交易失败..是否有解决方案可以恢复操作或同时更新这两个操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-04 00:51:57

没有安全的方法来实现多个事务之间的条件性。

如果这两个操作相互依赖,则它们应该作为单个事务运行。这意味着您对整个“用户”有一个乐观的锁,但在您当前的数据结构和解决方案中是必需的。

另一种选择是不更新余额,而只保留交易列表。在这种情况下,您可以使用多位置更新确保第一个用户的加法和第二个用户的减法都是原子写入的。在JavaScript中,这看起来类似于:

代码语言:javascript
复制
ref = firebase.database().ref("users");
var updates = {};
let transactionID = ref.push().key;
updates["uid1/transactions/"+transactionID] =  20;
updates["uid2/transactions/"+transactionID] = -20;
ref.update(updates);

上述写入操作要么完全成功,要么完全失败。这将确保您的数据库始终正确。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54968467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档