在使用服务器端firestore客户端时,乐观锁定是一个选项吗?



如果你阅读这里的文档,它说:

服务器客户端库(c#, Go, Java, Node.js, PHP, Python, Ruby)使用悲观并发控制来解决数据争用。

我不明白的是,我会在服务器端使用Firestore客户端并实现UPDATE endpoint的用例。为了避免这个端点上的数据竞争,我们可以使用Firestore transaction,但是我也可以通过在文档上添加Version字段来实现/考虑乐观锁定吗?

我发现在Firestore中不可能在单个操作中做到这一点,例如SQL ';更新';声明。相反,您必须获取文档,检查值,然后在满足条件时更新值。

是的,那是正确的。您不能一次执行这样的操作。您必须执行搜索,一旦您收到文档,您就可以更新它们。

所以我理解避免数据竞争的唯一方法是在使用服务器端Firestore客户端时使用事务。

这也是正确的。因此,当涉及到在多用户环境中自动更新Firestore文档时,确实需要一个事务。但是要考虑到事务需要往返于服务器,这意味着您首先读取文档,然后更新它。但是,如果您想要更新一个数字字段类型,无论服务器上的值是什么,例如,计数器,那么您还应该考虑使用FieldValue.increment(n),这也是一个原子操作,只需要一次写操作。

相关内容

最新更新