Consider these two cases in app engine datastore design:
- A is ancestor of B. We use a transaction to update this entity group.
- A and B are both without an ancestor. We use an XG transaction to update both entities.
I can see these advantages in case 2:
- Just like case 1, it achieves atomicity.
- If I give A and B the string or integer id, given that they are different kinds, I can lookup one of them when I have the other one. This would be an equivalent for looking up by parent or child in case 1.
- Because the entities are not in the group, they do not suffer the write throughput limit.
Are the above points correct? When and why should case 1 be used over case 2?