XG 事务最多可应用于25 个实体组。祖先查询将查询限制为单个实体组,您将能够在单个 XG 事务中在这 25 个实体组中进行查询。
没有父级的事务查询可能会包括应用程序中的所有实体组并锁定所有内容,因此您会收到一条错误消息。
在应用引擎中,通常会尝试避免单调增加的 id。自动分配的可能会像 101、10001、10002 等等。如果你知道你需要单调递增的 id 并且它会为你的性能工作,那么如何:
具有 userId 的某种模型表示以启用 key_name 使用和直接查找
查询事务外的userId,获取最高的候选id
在事务中做 get_or_insert; 查找 UserId.get_by_key_name(candidateid+1)。如果已经存在并指向不同的用户,请使用 +2 重试,以此类推,直到找到一个免费的并创建它,同时更新用户的 userid 属性。
If the XG-transaction of updating UserId+User is too slow, perhaps create UserId+task in transaction (not XG), and let the executing task associate UserId and User afterwards. Or a single backend that can serialize UserId creation and perhaps allow put_async if you retry to avoid holes in the sequence and do something like 50 creations per second.
If it's possible to use userName as key_name you can do direct lookup instead of query and make things faster and cheaper.