Google app engine 提交返回后,实体组内的更新是否始终对组内的读取可见?
我对本文中的示例有一个疑问: 假设我将Adam和Bob放在同一个实体组中,并修改getTallPeople操作以仅检查Adam和Bob的高度(即,仅访问实体组中的实体)。现在,如果我执行以下语句:Google app engine 提交返回后,实体组内的更新是否始终对组内的读取可见?,google-app-engine,Google App Engine,我对本文中的示例有一个疑问: 假设我将Adam和Bob放在同一个实体组中,并修改getTallPeople操作以仅检查Adam和Bob的高度(即,仅访问实体组中的实体)。现在,如果我执行以下语句: begin transaction updatePerson (update Adam's height to 74 inches) commit transaction begin transaction getTallPeople commit transaction 我能确定getTall
begin transaction
updatePerson (update Adam's height to 74 inches)
commit transaction
begin transaction
getTallPeople
commit transaction
我能确定getTallPeople总是会同时返回Adam和Bob吗?也就是说,如果实体/索引更新尚未完成,第二个事务是否会等待完成?另外,如果不使用getTallPeople事务,行为是否相同
谢谢你的帮助 是的。要在事务中调用getTallPeople,它必须在查询中使用“祖先”过滤器,将其结果限制为组成员。如果它这样做,它用来确定结果的索引数据和它基于这些结果获取的实体都将与前一个事务的提交结果强烈一致。如果查询使用祖先过滤器并且您使用的是HR数据存储,那么在没有显式事务的情况下也是如此。(HR数据存储已经是默认值一段时间了,所以您可能正在使用它。)
如果GetAllPeople在没有祖先过滤器的情况下执行查询,并且您使用的是HR数据存储,那么它将使用全局索引数据,而全局索引数据只能保证最终在整个数据集中保持一致。在这种情况下,查询可能会在上一个事务之前看到组的索引数据,即使上一个事务已经提交。更新了我的答案,确认HR数据存储确保祖先查询返回与组索引数据一致的结果实体,即使在显式事务之外。