firebase - 使用带有 Firebase 的 Mutex 来锁定文档,同时在扩大时避免多次重试尝试
问题描述
我有一个带有 Firebase 的一百万个大型文档集合,我将其视为一个堆栈数组,其中第一个元素被读取并从堆栈中删除。我的主要问题是我有超过一千个连接试图访问该集合,并且我在连接接收相同文档时遇到问题。为了防止重复结果,我使用了下面这篇文章引用的 Mutex。
我正在使用互斥锁来锁定每个文档,然后再将其从集合中删除。我使用事务来确保互斥锁所有者不会被其他连接覆盖,或者检查文档是否还没有被删除。
我对这个解决方案的问题是随着我们扩大规模,更多的连接正在争夺检索互斥锁。每个连接都会花费很长时间重试,直到成功锁定文档。避免长时间重试将允许更快的响应时间和更少的读取。
总而言之,连接尝试检索文档。它检索文档但未能成功创建锁定,因为另一个传入连接刚刚锁定它。所以它寻找另一个文件并且也失败了。它会不断重试,直到遇到另一个锁定文档的连接。
当我扩大规模时,是否可以提高吞吐量并保持较低的读取成本?
解决方案
是的,我怀疑这样的互斥锁是否会帮助您提高吞吐量。
以队列中的确切顺序处理文档有多重要?如果不是很重要,您可以考虑让每个客户端请求前 N 个文档,然后随机选择一个进行锁定和处理。这将使您的吞吐量提高 N 倍。
推荐阅读
- typescript - 如何引发复杂对象的错误?
- javascript - Nodejs 阻止代码执行,直到它接收到 TCP 命令(挂起一个 GUI 事件)
- python - 如何在 3D 渲染中匹配卡片放置?
- javascript - 我的播放列表插件不适用于 videojs?
- sql - 使用 IN 子句立即执行
- python - python中从十六进制到ASCII
- mysql - sql楼的进出记录
- javascript - 仅当数组长度发生变化时如何执行.js
- javascript - 如果用户未填写输入字段,如何发出咆哮警报?
- amazon-web-services - 从 AWS Lambda 运行脚本时出现 utf 错误,但从手动 ssh 运行时却没有