我试图弄清楚如何在Firebase中相应地更新我的数据。
我的应用是一个社交网络。让我们说,当访问者进来时,我必须更新user
对象和post
中的观看次数。我还必须更新updatedAt
相同对象中的值。
views
和updatedAt
字段在.write
和post
子项中都有一个特定的user
授权,因此任何人都可以修改它们,而不是其他人孩子。views
更新transaction
子项以自动递增计数updatedAt
子女可以通过transaction
,set
或update
以任何方式更新。我希望通过将这些更新放在一起来限制对Firebase的调用次数,并使整个更新成为原子。 (还因为我还没有在这里描述的更多内容)
问题是:
transaction
和views
的{{1}}必须发生两次:updatedAt
和posts
个对象,但访问者无法写入这些不属于他的对象,只能修改两个users
和views
个孩子。 (即使其他人没有受到影响)。updatedAt
孩子的原子性,这是一个问题。最后,我目前正在做什么:
view
个孩子上有一个transaction
,views
个update
个updatedAt
个posts
上有一个users
个这使每个每个访问者每个帖子的每个视图的四个操作成为四个操作。它经历了很多!
这也不是原子的,除了views
子节点,这对于时间戳字段来说不是什么大问题,但在其他用例中仍然是一个问题。
我的问题是:
有关更好实施的建议吗?
答案 0 :(得分:0)
至少,您应该可以使用data fan-out method通过单个updatedAt
来更新用户和帖子上的update()
字段。
您可能拥有的任何增量计数器仍然需要单独的事务才能正确处理。