Firebase RTDB批量事务(同时自增2个值)

Firebase RTDB batched transactions (increment 2 values at the same time)

我知道您可以使用 update 进行批量的、原子的全有或全无更新 - 但是您可以对事务做同样的事情吗?

目前我正在尝试在接受好友请求的同时增加用户好友数(2 个用户)。

这是我正在做的工作,但如果出现问题,将导致出现几次错误的数据不一致。

  const upOneFriend = firebase
    .database()
    .ref("users")
    .child(friend.uid)
    .child("friendCount");
  const upOneCurrentUser = firebase
    .database()
    .ref("users")
    .child(userUid)
    .child("friendCount");
  upOneFriend
    .transaction(currentCount => {
      return currentCount + 1;
    })
    .then(() => {
      upOneCurrentUser.transaction(currentCount2 => {
        return currentCount2 + 1;
      });
    })
    .catch(() => {
      console.log("error increment");
    });

就像我说的那样,这是有效的,但我需要同时做这件事!我环顾四周,没有发现任何与实时数据库的批处理事务相关的内容。

干杯。

Firebase 实时数据库中的事务在单个节点上工作。如果您需要更新事务中的多个节点,则需要 运行 在您要更新的节点之上的第一个公共节点上进行事务。在您的场景中,这意味着您 运行 跨越 users 的事务,这可能会显着降低吞吐量。

另一种方法是使用多位置更新。但是由于多位置更新不会自动防止并发写入,因此您必须在写入本身中包含防止并发写入的信息。

有关此示例,请在此处查看我的回答:, and How to update multiple children under child node using a transaction?