首页 > 解决方案 > 使用带有 Firebase 的 Mutex 来锁定文档,同时在扩大时避免多次重试尝试

问题描述

我有一个带有 Firebase 的一百万个大型文档集合,我将其视为一个堆栈数组,其中第一个元素被读取并从堆栈中删除。我的主要问题是我有超过一千个连接试图访问该集合,并且我在连接接收相同文档时遇到问题。为了防止重复结果,我使用了下面这篇文章引用的 Mutex。

Cloud Firestore 文档锁定

我正在使用互斥锁来锁定每个文档,然后再将其从集合中删除。我使用事务来确保互斥锁所有者不会被其他连接覆盖,或者检查文档是否还没有被删除。

我对这个解决方案的问题是随着我们扩大规模,更多的连接正在争夺检索互斥锁。每个连接都会花费很长时间重试,直到成功锁定文档。避免长时间重试将允许更快的响应时间和更少的读取。

总而言之,连接尝试检索文档。它检索文档但未能成功创建锁定,因为另一个传入连接刚刚锁定它。所以它寻找另一个文件并且也失败了。它会不断重试,直到遇到另一个锁定文档的连接。

当我扩大规模时,是否可以提高吞吐量并保持较低的读取成本?

标签: firebasegoogle-cloud-firestoremutex

解决方案


是的,我怀疑这样的互斥锁是否会帮助您提高吞吐量。

以队列中的确切顺序处理文档有多重要?如果不是很重要,您可以考虑让每个客户端请求前 N 个文档,然后随机选择一个进行锁定和处理。这将使您的吞吐量提高 N 倍。


推荐阅读