所以我有一个应用程序,如果我诚实并不真正需要事务完整性(许多更新,其中没有一个是关键的)。因此,我计划暂时将实体组留在路边。但我仍然希望了解它(来自关系背景)。
我看到它的方式,我的应用程序的所有查询都将基于用户。因此,根据docs recommendations,我不需要将任何高于用户实体的组分组。但我并没有计划拥有一个特定的用户实体,而是依赖于实体本身的UserProperty。
我看到它的方式,如果我想要交易(基于每个用户),我将需要某种root用户实体作为其数据层次结构的所有实体的父级,无论如何瘦这个实体实际上是,即基本上没有属性。
这是对的吗?
对于冗长的道歉,我只是真正地指出今晚在实践中实际上意味着什么模式......
答案 0 :(得分:11)
我看到它的方式,如果我想要交易(基于每个用户),我将需要某种root用户实体作为其数据层次结构的所有实体的父级,无论如何这个实体实际上很薄,即基本上没有属性。
我不会只创建一个root用户实体并将所有内容都放在其实体组中。想想你需要什么交易。如果您的用户实体上没有任何属性,那么您在使用?
的交易中将使用它我不知道您的数据,但我们假设它是一个博客系统,您有用户,帖子和评论。 Post模型包含number_of_comments,因此您无需计算它们。您可能希望事务确保在创建注释时,可以安全地更新number_of_comments属性。
在这种情况下,在单个实体组中拥有所有用户帖子和评论将是不必要的开销。相反,您可以将评论发布在与其所属的帖子相同的实体组中。没有必要将帖子与用户放在同一个组中,事实上这是一个坏主意,因为任何用户帖子中发布的评论都会争用写同一个实体组。
我今天在博客上写了short article about entity groups。您可能会发现它很有用。
答案 1 :(得分:3)
你基本上是正确的。如果需要事务功能,则需要对它们进行分组。但是,在数据存储区中的实体意义上,您可以将多个实体组合在一起,而无需创建实际的根实体。您改为创建一种虚拟根实体。此功能的一个重要用例是在创建子对象之前创建子对象的能力。
您可以使用。创建实体 没有先创建的祖先路径 父实体。为此,你 使用a为祖先创建一个密钥 种类和密钥名称,然后用它作为 新实体的父母。所有实体 与祖先相同的根源 同一个实体组,无论是否 路径的根代表一个 实际实体。