我使用Firebase拥有一百万个大型文档集合,我将其视为堆栈数组,其中第一个元素被读取并从堆栈中删除。我的主要问题是我有上千个尝试访问集合的连接,而接收同一文档的连接却遇到问题。为了防止重复结果,我采用了下面这篇文章所引用的Mutex。
Cloud Firestore document locking
我正在使用互斥锁来锁定每个文档,然后再将其从集合中删除。我使用事务来确保互斥体所有者不会被其他连接覆盖,或者检查文档是否尚未删除。
此解决方案的问题在于,随着我们规模的扩大,越来越多的连接正在争夺互斥锁。每个连接都花很长时间重试,直到成功锁定文档。避免长时间重试,可以缩短响应时间,减少读取次数。
因此,总而言之,连接尝试检索文档。它可以检索文档,但由于另一个传入连接刚刚将其锁定而无法成功创建锁。因此它将寻找另一个文档,并且也会失败。它会不断重试,直到它再次锁定文档为止。
是否有可能在我扩大规模时提高吞吐量并保持较低的读取成本?