Firebase 同时创建/删除文档时是否再次运行firestore事务?
文件中说: 在并发编辑的情况下,Cloud Firestore将再次运行整个事务。例如,如果一个事务读取文档,而另一个客户端修改了其中任何一个文档,则Cloud 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” 同时创建/删除两个文档 两个文档都添加/删除到同一集合中或从同一集合中删除 算法 (参见我在阅读时添加的图像) 从该集合中创建/删除文档
例如 想象一下,当用户按下“操作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!非常感谢。