我是数据库模式下的Google Cloud Firestore的新手,并且对其交易有疑问。
如果有两个属于同一实体组的实体,那么在一个事务上更新一个实体是否会禁止在另一个事务上更新另一个实体?
我在下面展示一个示例案例。
Entity A:
Key:
Kind: Foo, id: 0, Parent: "P"
Properties:
description: "I am A."
Entity B:
Key:
Kind: Foo, id: 1, Parent: "P"
Properties:
description: "I am B"
TRANSACTION #1 BEGIN;
A.description = "I am new A";
TRANSACTION #2 BEGIN;
B.description = "I am new B";
TRANSACTION #1 COMMIT; -- *1
TRANSACTION #2 COMMIT; -- *2
* 1或* 2成功吗?
谢谢!
答案 0 :(得分:2)
如果有两个属于同一实体组的实体,那么在一个事务上更新一个实体是否会禁止在另一个事务上更新另一个实体?
否,与OR
无关,与AND
无关,因此将提交两个事务。据我从架构中了解到,您尝试使用事务来更新两个单独的文档,这些文档将始终有效。即使您试图更新同一文档,它也始终可以工作,提交的顺序就是您在事务对象上调用commit()
的顺序。因此,您提交的结果将是:
Entity A:
Key:
Kind: Foo, id: 0, Parent: "P"
Properties:
description: "I am new A."
Entity B:
Key:
Kind: Foo, id: 1, Parent: "P"
Properties:
description: "I am new B"