失败前 Firebase 事务的最大重试次数是多少

Posted

技术标签:

【中文标题】失败前 Firebase 事务的最大重试次数是多少【英文标题】:What is the maximum number of retries for Firebase transaction before failing 【发布时间】:2016-11-21 21:44:51 【问题描述】:

我在 Firebase 下有一个用于不同餐厅的节点,其中包含活跃和过去访客的列表。此节点名为listvisitors。在餐厅节点下,我想为所有访客设置一个柜台。这是我想使用 Firebase 事务的地方。

这个想法是当一个人打开餐厅页面时增加计数器。由于存在争议,交易似乎是一个不错的选择。

一家受欢迎的餐厅可能会同时吸引大量访客,从而导致争用。交易可以扩展来处理这个问题吗?

如果是这样,事务在因最大重试次数错误而失败之前可以处理的最大重试次数是多少。 (基本上是假设所有用户同时登录的最大同时更新)

如果没有。是否有一种有效的替代方法可以从根本上计算列表下当前子项的数量并获得正确的数量?

【问题讨论】:

【参考方案1】:

如果在 25 次尝试后仍未成功,Firebase 客户端当前会中止事务。

在您看到这种竞争程度之前,明智的做法是更改为不同的策略。解决此问题的常用方法是不让每个访问者更新公共计数器,而是让每个访问者使用push() 将“我访问过这个”写入数据库:

ref.child("visits").push().setValue(currentUser.getUid());

然后,您可以拥有一个服务器端进程,将访问从列表中拉出并增加计数器。处于稳定状态意味着visits 的列表为空。在任何时候,visits 列表只包含尚未统计的访问。

这样做会更好的原因是服务器端进程不会有任何更新计数器的争用。所以它实际上并不需要使用事务。但即使它确实使用了事务,它也“永远”不必重试。

【讨论】:

您好,坦率地说,感谢您的回答.... 实际上,柜台用于显示当前活跃的访客,告诉客户他们必须面对的人群数量。不幸的是,我不能让服务器这样做。客户添加到列表中,餐厅在他们离开时删除。请提出任何您认为可以解决此问题的建议。 老实说:听起来您目前不太可能遇到争用问题。如果你这样做:我的回答显示了替代方案。【参考方案2】:

也许 Princig 常见问题解答可以帮助您...问题:什么是“同步数据库连接”? 这是他们提供的答案:

Firebase 对同时连接到应用数据库的数量施加了硬性限制。这些限制是为了保护 Firebase 和我们的用户免受滥用。 Spark 计划限制为 100 且无法提高。 Flame 和 Blaze 计划目前的初始限制为 10,000 个同时数据库连接。 此限制与您的应用的用户总数不同,因为您的用户不会一次全部连接。我们建议您监控同时数据库连接的峰值,并在需要时进行升级。 我们正在努力取消 Flame 和 Blaze 计划中最初的 10,000 个同时连接上限。

关于获取当前孩子数量的选项,有一个methodnumbChildren,但这取决于您的快照... Here 是一些用户在讨论这个问题。

【讨论】:

我的意思是同时更新一个特定位置的值....事务旨在解决这种并发性...我的问题是对于事务而言,并发量过多,因为它会不断尝试写入数据直到它最终成功而没有任何争用,或者只是放弃了我指定的错误。

以上是关于失败前 Firebase 事务的最大重试次数是多少的主要内容,如果未能解决你的问题,请参考以下文章

rabbitmq~消息失败后重试达到 TTL放到死信队列(事务型消息补偿机制)

运行 dbt 时 BigQuery“超出最大重试次数”

使用Python请求http/https时设置失败重试次数

URL Selenium 超出了最大重试次数[重复]

执行的最大重试次数。应用程序加载器问题

通过 Polly 重试策略确定最终重试的完成