Google App Engine 数据存储中的实体组

7
所以我有一个应用程序,如果说实话,它并不真正需要事务完整性(大量更新,没有关键更新)。因此,我计划暂时放弃实体组。但是我仍然想了解它(来自关系背景)。
在我看来,我的应用程序的所有查询都将基于用户。因此,根据文档建议,我不需要对任何高于用户实体进行分组。但是,我没有计划拥有特定的用户实体,而是依赖于实体本身的UserProperty。
在我看来,如果我想要事务(按用户),则需要某种根用户实体作为层次结构中所有实体的父级,无论这个实体有多薄,即基本上没有属性。
这正确吗?
对于冗长的表述,我表示歉意,我只是今晚才真正意识到无模式实际上意味着什么...
2个回答

12
我认为,如果我想要交易(按用户计算),我需要一些根用户实体作为层次结构中所有实体的父级,无论这个实体有多薄,即基本上没有属性。
我不会只创建一个根用户实体并将所有内容都放在其实体组中。考虑一下您需要交易的内容。如果您的用户实体没有任何属性,那么您将如何在其中使用交易?
我不知道您的数据情况,但让我们假设它是一个博客系统,您有用户、帖子和评论。Post模型保存了number_of_comments,因此您不必对其进行计数。您可能希望进行交易以确保在创建评论时,number_of_comments属性可以安全地更新。
在这种情况下,将所有用户的帖子和评论放在单个实体组中将是不必要的开销。相反,您可以将评论发布在与其所属的帖子相同的实体组中。没有必要将帖子放入同一组中作为用户,并且事实上这将是一个坏主意,因为在用户的任何帖子中发布的评论都将争夺写入同一实体组。
我今天在我的博客上写了一篇关于实体组的简短文章。您可能会发现它有用。

3
您的理解基本上是正确的。如果您想要事务能力,您需要将它们分组。但是,您可以将多个实体组合在一起而不创建实际的根实体,从而创建一种虚拟的根实体。这个特性的一个重要用例是在创建父对象之前创建子对象的能力。
引用:
您可以创建一个具有祖先路径的实体,而无需首先创建父实体。为此,您可以使用种类和键名创建祖先的关键字,然后将其用作新实体的父级。所有具有相同根祖先的实体都属于同一个实体组,无论路径的根是否表示实际实体。
该引用来自您链接到的同一文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接