将Mutex与Firebase结合使用可锁定文档,同时避免按比例放大时进行多次重试

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

Cloud Firestore document locking

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

此解决方案的问题在于,随着我们规模的扩大,越来越多的连接正在争夺互斥锁。每个连接都花很长时间重试,直到成功锁定文档。避免长时间重试,可以缩短响应时间,减少读取次数。

因此,总而言之,连接尝试检索文档。它可以检索文档,但由于另一个传入连接刚刚将其锁定而无法成功创建锁。因此它将寻找另一个文档,并且也会失败。它会不断重试,直到它再次锁定文档为止。

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

tycotyco 回答:将Mutex与Firebase结合使用可锁定文档,同时避免按比例放大时进行多次重试

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

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

本文链接:https://www.f2er.com/3032319.html

大家都在问