在什么级别 - 在同一实体组的事务操作中发生锁定和冲突?在根?在一些普通的,足够广泛的父母?
我不清楚什么是交易的“实体组”。它始终是一个源自根实体的组(没有父级),还是有一种机制可以选择足够宽的组进行事务处理。
例如,当我有这样的模型结构时:
- School
- Teacher
- Class
- Course
- Lesson
- Evaluation
- Student
- Guardian
- Grade
- PresenceMarker
- TextBook
我的交易操作是否始终将“实体组”称为源自学校级别的组(无论实际操作发生的级别如何),或者当我更新同一班级中的学生实体时,我只能与之碰撞在同一类实体下发生的其他交易操作。
换句话说,是否只有一个实体组从学校开始,或者是否存在源自层次结构中每个其他级别的子实体组?如果有子实体组,它们是否用于事务隔离?
更新
以Sharding counters为另一个例子。如果所有分片都有共同的父级,分片是否会起作用?更新单个计数器分片会导致其他分片上的事务冲突更新吗?
答案 0 :(得分:2)
App Engine中的事务发生在实体组级别。 (请参阅文档here和here)
是否存在源自层次结构中每个其他级别的子实体组?
没有“子实体组”。每个实体都只有一个实体组,因为它有一个最终的祖先。在您的示例中,您的所有模型最终都属于学校组。
如果所有分片都有共同的父级,分片是否会起作用?
要使分片按预期工作,每个分片必须位于其自己的实体组中。如果查看示例代码,可以看到每个分片都在自己的组中。您还可以看到,虽然increment()方法使用事务,但get_count()却没有。增量仅影响一个组,而get_count则从多个组中获取数据。
注意:App Engine的最新版本允许跨群组交易,但这是特殊情况,并且组的定义没有改变。
答案 1 :(得分:0)
据我所知,文档GAE始终使用实体组树的根作为其日志,该日志管理锁和事务。