Google app engine 数据存储实体是否应始终具有父实体

Google app engine 数据存储实体是否应始终具有父实体,google-app-engine,Google App Engine,拥有数据存储实体的父实体的一个好处是,我可以在我的实体上执行事务 但是,我不需要在我的实体上执行事务 我想知道,我的实体没有母公司可以吗?这会使我的代码更简单,更易于维护吗 没有实体的父级是否有任何副作用 我担心没有父母,其中一个问题是最终的一致性。写入操作之后,我希望我的读取操作能够获取最新的写入值。我使用的是User.get\u或\u insert进行写入(可能读取),而User.get\u by\u id进行只读 执行User.get\u或\u insert,然后下一个请求User.ge

拥有数据存储实体的父实体的一个好处是,我可以在我的实体上执行事务

但是,我不需要在我的实体上执行事务

我想知道,我的实体没有母公司可以吗?这会使我的代码更简单,更易于维护吗

没有实体的父级是否有任何副作用

我担心没有父母,其中一个问题是最终的一致性。写入操作之后,我希望我的读取操作能够获取最新的写入值。我使用的是
User.get\u或\u insert
进行写入(可能读取),而
User.get\u by\u id
进行只读


执行
User.get\u或\u insert
,然后下一个请求
User.get\u by\u id
将返回最新值。我想知道,为了实现强一致性,父键是否是一件重要的事情?

这意味着您将受到最终一致性的约束:事务之外的查询不保证一致。如果这不困扰你,那么就没有理由使用父母

我想知道,我的实体没有母公司可以吗

绝对,是的,但是你需要考虑你将如何阅读和写你的数据,这样你就不会遇到任何错误。 如果您没有祖先,您的查询将只有最终的一致性,因此您可能会发现一些结果与您的查询不匹配。请记住,您还可以使用跨实体组(“XG”)事务,它最多可以涉及5个实体组(没有祖先的实体定义自己的实体组),这使您具有一定的灵活性


另一方面,无论您的实体是否有祖先,您都可以在任何时候使用“按键获取”来获得强一致性。

回答得好,但可能需要澄清的是,您的第一句话是在回答问题主体中使用的问题,而不是标题中的那一个-不幸的是相反:)和跨组交易现在被限制为25个实体组,而不是5个。@Greg-谢谢,很好!我添加了一个引号以避免任何混淆。如果我使用
User.get\u或\u insert
进行写入(可能的读取),使用
User.get\u by\u id
进行读取,它能在没有父项的情况下实现强一致性行为吗?如果您仅通过键访问项目,那么您将始终获得最新版本。但是,您确定永远不需要按名称查询用户,或者迭代匹配某些条件的用户吗?