【发布时间】:2019-06-08 14:19:58
【问题描述】:
根据firestoredocumentation:
事务是对一个或多个文档的一组读写操作。
还有:
客户端离线时交易会失败。
现在firestore的限制是:
在 Cloud Firestore 中,您大约每秒只能更新一次单个文档,这对于某些高流量应用程序来说可能太低了。
因此,当流量高时使用云功能和运行事务来增加/减少计数器将会失败。
所以他们讨论了使用distributed counters的方法。
根据分布式计数器的算法:
- 创建分片
- 随机选择一个分片
- 运行事务以增加/减少计数器
- 获取所有分片并聚合 结果显示计数器的值
场景:
考虑您有一个计数器,当添加文档并且该计数器显示在 UI 中时,该计数器将被更新。现在对于良好的用户体验,当网络离线时我无法阻止用户界面。因此,即使客户端离线,我也必须允许创建/更新文档,并在客户端在线后同步这些更改,以便其他所有监听这些更改的人都能收到正确的计数器值。
现在当客户端离线时事务会失败。 所以我的问题为了获得最佳用户体验(即使离线)是:
您真的需要事务来增加计数器吗?我知道 事务确保写入是原子的,并且要么 成功/不成功并防止部分写入。但到底是什么 当他们离线失败时?我在想也许可以将它们写入本地缓存并在网络重新上线后同步它。
这应该通过客户端 SDK 还是通过云功能来完成?
【问题讨论】:
标签: firebase transactions google-cloud-firestore counter