如何在多个 Firestore 实例之间创建事务/批量写入?



Firebase 允许在单个应用程序中拥有多个项目。

// Initialize another app with a different config
var secondary = firebase.initializeApp(secondaryAppConfig, "secondary");
// Retrieve the database.
var secondaryDatabase = secondary.database();

示例: 项目 1 有我的用户集合;项目 2 有我的朋友收藏(假设这是有原因的(。当我在项目 2 数据库中添加新朋友时,我想递增项目 1 中用户文档中的 friendsCount。出于这个原因,我想创建一个事务/批量写入以确保数据的一致性。

我怎样才能做到这一点?我可以在不同的 Firestore 实例之间创建事务或批量写入吗?

不可以,不能跨多个数据库使用数据库事务功能。

如果绝对需要,我可能会创建一个自定义锁定功能。来自维基,

为了允许多个用户同时编辑数据库表,并防止因不受限制的访问而造成的不一致,可以在检索单个记录以进行编辑或更新时锁定单个记录。由于锁定,任何尝试检索同一记录进行编辑的人都将被拒绝写入访问权限(尽管根据实现的不同,他们可能能够在不编辑记录的情况下查看记录(。保存记录或取消编辑后,将释放锁定。永远无法保存记录以覆盖其他更改,从而保持数据完整性。

在数据库管理理论中,锁定用于实现多个数据库用户之间的隔离。这是首字母缩略词ACID中的"I"。

来源: https://en.wikipedia.org/wiki/Record_locking

我知道这个问题已经三年了,但由于我需要同样的东西,我找到了一个可行的解决方案来执行双重(甚至 ^n(事务。您必须像这样嵌套事务。

db1.runTransaction(t1 => db2.runTransaction(t2 => async () => {
await t1.set(.....
await t2.update(.....
etc....
})).then(...).catch(...)

由于错误在嵌套承诺中传播,因此以这种方式执行双重事务是安全的,因为对于任何一个数据库中的故障,它会导致所有数据库中的错误。

最新更新