【发布时间】:2011-12-07 15:04:18
【问题描述】:
在同一实体组的事务操作中,锁定和冲突发生在哪里——在什么级别?在根?在某个常见的、足够广泛的父级上?
我不清楚交易的“实体组”是什么。它始终是源自根实体(没有父实体)的组,还是有一种机制可以选择足够宽的组进行事务处理。
例如,当我有这样的模型结构时:
- School
- Teacher
- Class
- Course
- Lesson
- Evaluation
- Student
- Guardian
- Grade
- PresenceMarker
- TextBook
我的事务操作是否总是将“实体组”称为源自学校级别的组(无论实际操作发生在哪个级别),或者当我更新同一班级的学生实体时,我只能与在同一类实体下发生的其他事务操作。
换句话说,是只有一个实体组从 School 开始,还是存在源自层次结构中每个其他级别的子实体组?如果有子实体组,是否用于事务隔离?
更新:
以Sharding counters 为例。如果所有分片都有共同的父级,分片会起作用吗?更新单个计数器分片会导致其他分片上的事务冲突更新吗?
【问题讨论】:
-
虽然彼得的回答正确地说不同分片之间的事务不会发生冲突,但分片计数器的示例代码不处理分片内的冲突。我创建了一个项目来验证这一点并测量碰撞率。详情在这里:github.com/hrj/gae_tx_test
标签: google-app-engine transactions google-cloud-datastore