Firebase 同时创建/删除文档时是否再次运行firestore事务?

Firebase 同时创建/删除文档时是否再次运行firestore事务?,firebase,asynchronous,google-cloud-firestore,google-cloud-functions,nosql,Firebase,Asynchronous,Google Cloud Firestore,Google Cloud Functions,Nosql,文件中说: 在并发编辑的情况下,Cloud Firestore将再次运行整个事务。例如,如果一个事务读取文档,而另一个客户端修改了其中任何一个文档,则Cloud Firestore将重试该事务。此功能确保事务在最新和一致的数据上运行 但这是否包括文档创建/删除? 例如 想象一下,当用户按下“操作a”或“操作B”按钮时,可以重新创建/删除两个文档“a”或“B” 同时创建/删除两个文档 两个文档都添加/删除到同一集合中或从同一集合中删除 算法 (参见我在阅读时添加的图像) 从该集合中创建/删除文档

文件中说:

在并发编辑的情况下,Cloud Firestore将再次运行整个事务。例如,如果一个事务读取文档,而另一个客户端修改了其中任何一个文档,则Cloud Firestore将重试该事务。此功能确保事务在最新和一致的数据上运行

但这是否包括文档创建/删除?


例如 想象一下,当用户按下“操作a”或“操作B”按钮时,可以重新创建/删除两个文档“a”或“B”

同时创建/删除两个文档

两个文档都添加/删除到同一集合中或从同一集合中删除

算法 (参见我在阅读时添加的图像)

从该集合中创建/删除文档时,触发器函数将开始执行以下代码:

  if(docB has been deleted) {
      if(docA exists) {
          // Create a document... other operations
          console.log("HERE")
      }
  }

  /* else if(docA has been created) {
          ...
  } */
这种情况会带来问题:

 Initial state: (second 0)
           - docA is not created
           - docB is created
 
 Both actions running in parallel:
           -started Action A (second 0)
           -started Action B (second 0)
           -finished Action B -> docB has been deleted (second 1.1)
           -finished Action A -> docA has been created (second 1.11)
正如您所看到的,这是一个并发问题,因为在前端按两个按钮太快(或网络延迟,…)

这个问题可以通过将算法包装到“数据库事务”中来解决吗?我的意思是,如果算法所依赖的文档在事务完成之前已经被创建/删除,那么事务是否会被重新执行(或其他什么)

Pd:我还尝试检查onTrigger函数中所有可能的状态。。。但问题是同一函数的两个实例可以并行运行

有什么想法吗? 谢谢

算法的图像

[Firestore的交易机制]是否包括文档创建/删除


文档创建和删除是对文档的修改,因此包含在您报价的保证中。

awesome!非常感谢。