数据存储区实体是否应始终具有父级

时间:2015-07-21 05:39:27

标签: google-app-engine

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

https://cloud.google.com/appengine/docs/python/datastore/transactions

但是,我不需要在我的实体上执行交易。

我在想,我的实体没有父母可以吗?因为,这将使我的代码更简单,易于维护?

没有父母为实体有任何副作用吗?

我担心没有父母,最终的一致性。写操作后,我希望我的读操作能够获取最新的写入值。我正在使用User.get_or_insert来编写(可能的读取),并使用User.get_by_id来进行只读。

我想在执行User.get_or_insert之后,下一个请求User.get_by_id将返回最新值。我想知道,要实现强一致性,父键是一个重要的东西吗?

2 个答案:

答案 0 :(得分:2)

  

我想知道,没有我的实体的父级是否可以?

当然,是的,但是您需要考虑如何阅读和编写数据,这样就不会遇到任何问题。

如果您没有祖先,您的查询将只具有最终的一致性,因此您可能会发现一些与您的查询不匹配的结果。请记住,您还可以使用跨实体组('XG')事务,这些事务最多可涉及5个实体组(没有祖先的实体定义自己的实体组),这样可以提供一些灵活性。

另一方面,无论您的实体是否具有祖先,您都可以随时使用按键获取强一致性。

答案 1 :(得分:1)

这意味着您将受到最终的一致性:交易之外的查询不能保证一致。如果这不打扰你,那么没有理由使用父母。