Firebase:原子事务和多位置更新

Firebase:原子事务和多位置更新,firebase,firebase-security,Firebase,Firebase Security,我正试图找出如何在Firebase中相应地更新我的数据 我的应用程序是一个社交网络。假设我必须更新user对象和post中的视图计数,当访问者进来时。我还必须更新相同对象中的updatedAt值 视图和updatedAt字段都有一个特定的。在post和用户子项中写入授权,这样任何人都可以修改它们,这与其他子项不同 必须使用事务更新视图子项,以原子方式增加计数 另一方面,可以通过事务、设置或更新以任何方式更新更新的子级 我想限制对Firebase的调用数量,并通过一起进行这些更新,使整个更新成

我正试图找出如何在Firebase中相应地更新我的数据

我的应用程序是一个社交网络。假设我必须更新
user
对象和
post
中的视图计数,当访问者进来时。我还必须更新相同对象中的
updatedAt

  • 视图
    updatedAt
    字段都有一个特定的
    。在
    post
    用户
    子项中写入
    授权,这样任何人都可以修改它们,这与其他子项不同
  • 必须使用
    事务更新
    视图
    子项
    ,以原子方式增加计数
  • 另一方面,可以通过
    事务
    设置
    更新
    以任何方式更新
    更新的子级
我想限制对Firebase的调用数量,并通过一起进行这些更新,使整个更新成为原子更新。(也是因为还有很多我在这里没有描述的内容)

问题是:

  • 更新
    视图
    更新数据
    事务
    必须发生两次:在
    帖子
    用户
    对象上,但是访问者不能在这些不属于他的对象上写字,只能修改两个
    视图
    更新数据
    子对象。(即使其他人未受影响)
  • 多位置事务在当前的Firebase API AFAIK中不可用,因此这也不是原子事务
  • 在多用户环境中,对每个子对象进行多位置更新会破坏
    视图
    子对象的原子性,这是一个问题
  • 最后,我现在做的是:

    视图
    子对象上有一个
    事务
    ,在
    更新数据
    对象上有一个
    更新
    ,分别在
    帖子
    用户
    对象上进行,这使得每个访问者查看的每个帖子的每个视图都有四个操作。太多了

    这也不是原子性的,除了
    视图
    子项,这对于时间戳字段来说不是什么大问题,但在其他用例中仍然是一个问题

    我的问题是:


    是否有更好的实施建议?

    至少,您应该能够使用单个
    update()
    调用来更新用户和帖子上的
    updatedAt
    字段


    您可能拥有的任何增量计数器仍需要单独的事务才能正确处理。

    “文档中说,更新会中断该对象上发生的所有事务。它是全局的吗?”否。这是您更新的路径上/下的所有事务。抱歉,我不清楚,根据全局信息:不仅是当前用户会话,还有应用程序的任何用户(我知道事务需要位于更新的“路径”中才能取消)。我想答案显然是肯定的。我的错误是,明确地说,当同一位置的本地
    set
    取消事务时,其他客户端的
    set
    不会取消事务。如果其他客户端访问同一位置,本地客户端将使用最新数据重试事务。如果这是您要查找的信息,请将其添加为自我回答并接受。我自己还没有一个关于我的问题的明确答案(我仍然需要对每个帖子视图进行四次操作),但希望在几周后我会这样做,当我将我的应用程序的业务逻辑迁移到使用redux商店时,我需要重新考虑这种数据交互。