【发布时间】:2015-12-08 11:06:33
【问题描述】:
我们正在使用 nodejs firebase sdk 在不稳定的互联网连接上将本地更新推送到 IoT 板上的数据集。连接是损坏的,有很多数据包丢失。
现在假设 UpdateA 和 UpdateB 被推送到 firebase(使用 set() 操作)。由于数据包丢失,UpdateA 无法到达 Firebase 服务器,但 UpdateB 成功了。
在这种情况下会发生什么? firebase 会提交 UpdateB 并中继到所有连接的客户端,然后当它获得 UpdateA 时,它会为它做同样的事情吗?还是 Firebase 服务器会确保所有写入都按照它们在本地服务器上发生的顺序提交,并以相同的顺序中继它们?
注意:UpdateA 和 UpdateB 发生在同一台服务器上
这里有更多细节:
我在 IoT 设备上的 nodejs 服务中使用 Firebase js sdk。该设备的互联网连接不稳定,可以在没有警告的情况下关闭电源。将部署数以千计的此类设备,它们必须在它们之间同步某些数据集(用户数字钱包)。由于这种情况,我正在使用 mongodb 实现本地离线持久缓存。钱包的所有更新首先保存在数据库中,然后被推送到 firebase。现在,我将钱包的所有更新按更新顺序依次推送到 firebase。由于 set 操作的回调将触发,我将记下最后一次成功的完整写入操作的更新时间戳。现在,如果设备关闭并在一段时间后打开,我可以从更新时间继续将本地更新推送到 firebase。
但是,只有当 firebase 保证我执行写入操作的顺序与它们将提交到 firebase 服务器的顺序相同时,此逻辑才有效,即以相同的顺序触发 set 操作的回调。
【问题讨论】:
标签: firebase