小编Moh*_*aaz的帖子

更新 firestore 上的计数器时,firestore 事务和 FieldValue.increment 之间的差异

我知道这个问题之前已经被问过,并且 firebase 官方文档也表明这两者具有完全相同的效果。

然而,由于以下几点,我对两者的看法感到困惑:

  1. 交易在中止时重试,但文档中没有提到 FieldValue.increment() 会执行相同的操作。
  2. 如文档中所述,Firestore 文档的最大写入速率是每秒一次写入,因此使用 FieldValue.increment() 每秒更新单个计数器的次数不能超过一次。但文档没有提到的是,在这种情况下会发生什么?例如,如果一秒内调用 FieldValue.increment() 两次,那么对 FieldValue.increment() 的第二次调用是否完全失败,或者它被阻塞,直到一秒过去,然后在该秒或其他事情发生后执行。
  3. 如果两个不同的客户端同时运行用于更新同一计数器的两个相同事务,那么其中一个事务是否会中止并重试?

考虑到上述几点,我认为事务更新计数器更安全,特别是在多个客户端可以更新单个计数器的情况下,因此,如果上述假设成立,则每当两个或多个客户端尝试时 FieldValue.increment() 都会失败一秒内更新计数器。但对事务执行同样的操作,将具有在由于并发而中止时自动重试的优点。

所以我想知道我的假设是否正确?如果不是,那么上述三件事到底是通过什么方式完成的呢?另外考虑到多个用户更新单个计数器的示例,使用事务比 FieldValue.increment() 是否有优势。

concurrency transactions firebase google-cloud-firestore

9
推荐指数
1
解决办法
1278
查看次数

firestore 批量写入失败时会自动重新运行吗?

在查看官方文档时,我发现 SDK 在失败时会自动重新运行事务有限次数,但是在批量写入的情况下,并没有明确提及。

文档确实提到批量写入就像事务一样是原子的,但这并不一定意味着它们也会在失败时重新运行。

javascript firebase react-native google-cloud-firestore

5
推荐指数
1
解决办法
1480
查看次数