Moh*_*aaz 9 concurrency transactions firebase google-cloud-firestore
我知道这个问题之前已经被问过,并且 firebase 官方文档也表明这两者具有完全相同的效果。
然而,由于以下几点,我对两者的看法感到困惑:
考虑到上述几点,我认为事务更新计数器更安全,特别是在多个客户端可以更新单个计数器的情况下,因此,如果上述假设成立,则每当两个或多个客户端尝试时 FieldValue.increment() 都会失败一秒内更新计数器。但对事务执行同样的操作,将具有在由于并发而中止时自动重试的优点。
所以我想知道我的假设是否正确?如果不是,那么上述三件事到底是通过什么方式完成的呢?另外考虑到多个用户更新单个计数器的示例,使用事务比 FieldValue.increment() 是否有优势。
Dou*_*son 13
与事务不同,对于冲突的增量操作,客户端和服务器之间不需要往返。这是因为客户端不需要重新计算新值。服务器很清楚它只会是单个文档的现有字段的增量,并且它可以自行在内部重试。
如果超出限制,写入操作将失败,就像超出限制的任何其他写入操作一样。在这方面增量没有什么特别的。请记住,对文档进行两次快速更改不一定会彻底失败。每秒 1 次变化的限制是持续限制。系统可以在短时间内处理一些快速变化,但不能无限期地持续下去。同样,这适用于所有写入,而不仅仅是增量。
不,每笔交易都会独立驱动创建。是否存在任何“相同”交易(无论您以何种方式定义)并不重要。
如果您所做的只是更新单个文档,那么使用事务相对于增量没有任何优势。但是,如果多个文档之间的更新必须是原子的,则需要使用事务。
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |