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

时间:2016-02-17 12:40:58

标签: firebase firebase-security

我试图弄清楚如何在Firebase中相应地更新我的数据。

我的应用是一个社交网络。让我们说,当访问者进来时,我必须更新user对象和post中的观看次数。我还必须更新updatedAt相同对象中的值。

  • viewsupdatedAt字段在.writepost子项中都有一个特定的user授权,因此任何人都可以修改它们,而不是其他人孩子。
  • 必须使用views更新transaction子项以自动递增计数
  • 另一方面,updatedAt子女可以通过transactionsetupdate以任何方式更新。

我希望通过将这些更新放在一起来限制对Firebase的调用次数,并使整个更新成为原子。 (还因为我还没有在这里描述的更多内容)

问题是:

  1. 要更新transactionviews的{​​{1}}必须发生两次:updatedAtposts个对象,但访问者无法写入这些不属于他的对象,只能修改两个usersviews个孩子。 (即使其他人没有受到影响)。
  2. 目前的Firebase API AFAIK中没有多地点交易,因此这也不是原子的。
  3. 在多用户环境中,每个孩子的多位置更新会破坏updatedAt孩子的原子性,这是一个问题。
  4. 最后,我目前正在做什么:

    view个孩子上有一个transactionviewsupdateupdatedAtposts上有一个users个这使每个每个访问者每个帖子的每个视图的四个操作成为四个操作。它经历了很多!

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

    我的问题是:

    有关更好实施的建议吗?

1 个答案:

答案 0 :(得分:0)

至少,您应该可以使用data fan-out method通过单个updatedAt来更新用户和帖子上的update()字段。

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