实体组对数据存储模式下Google Cloud Firestore中交易的影响

时间:2019-09-30 07:52:11

标签: google-cloud-platform google-cloud-firestore google-cloud-datastore

我是数据库模式下的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成功吗?

谢谢!

1 个答案:

答案 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"