Firestore 中服务器端事务的行为

问题描述 投票:0回答:1

当我使用 Firestore 的服务器客户端库(它是悲观锁)运行事务时,我的理解是它不允许其他人写入,但允许读取。

此外,就该事务的行为而言,我了解到第一次读取成功,但写入失败,并且第二次重新执行该事务。

在这种情况下,是否可以通过 try-catch 获得第一次写入失败,并在发生错误时执行另一个函数而不是第二次重试事务?

:即,我不希望事务在与其他事务冲突而失败后重试。

firebase google-cloud-platform google-cloud-firestore transactions locking
1个回答
1
投票

此外,就该交易的行为而言,我理解 第一次读取成功,但写入失败,并且 交易第二次重新执行。

不,这不是使用悲观并发控制来解决数据争用的服务器客户端库的事务行为。

文档中所述,“悲观事务使用数据库锁来防止其他操作修改数据”。 “文档上的事务锁定会阻止其他事务、批量写入和非事务写入更改该文档”。

换句话说,悲观事务不会失败,因为来自事务外部的写操作试图写入事务读取的文档。它将阻止“外部写入”,直到它在提交时释放其文档锁。该交易不是“第二次重新执行”。

我不希望事务在由于冲突而失败后重试 与其他交易。

“当事务锁定文档时,其他写操作必须等待事务释放其锁。事务按时间顺序获取锁。”

© www.soinside.com 2019 - 2024. All rights reserved.