【发布时间】:2019-08-02 03:23:20
【问题描述】:
Firebase 实时数据库是否提供强一致性?
在某些情况下,我们将 Firebase 实时数据库用作队列:
场景 1
-
移动客户端将
item文档写入/items -
Server A(云功能)监听
/items,并通过POST /processItem/:itemID调用Server B -
服务器 B 获取
items/:item并开始处理 - 处理后,服务器 B 写入
item.processedAt = <timestamp>
场景 1 的逻辑似乎工作正常,但是,我们开始怀疑 Firebase 是否真的提供强一致性,以及我们是否可以确定 Server B 何时获取 items/:itemID来自 Firebase,文档肯定存在。
场景 2
-
服务器 A 将
item文档写入/items并等待.set()操作通过。 -
服务器 A 通过
POST /processItem/:itemID调用 服务器 B -
服务器 B 获取
items/:itemID并开始处理 - 处理后,服务器 B 写入
item.processedAt = <timestamp>
这可能会更加“危险”,因为 服务器 A 可能会在 child_added 事件触发之前调用 服务器 B。
这两种情况都安全吗?
【问题讨论】:
标签: firebase firebase-realtime-database