7

所以我有一个应用程序,老实说,它并不真正需要事务完整性(很多更新,没有一个是关键的)。所以我打算暂时将实体组搁置一旁。但我仍然想了解它(来自关系背景)。

在我看来,对我的应用程序的所有查询都将逐个用户进行。因此,根据文档建议,我不需要将任何高于用户实体的分组。但我并不打算拥有一个特定的用户实体,而是依赖实体本身中的 UserProperty。

在我看来,如果我想要交易(基于每个用户),我将需要某种根用户实体作为所有实体的父级,这些实体是她的数据层次结构的一部分,无论这个实体有多薄实际上,即基本上没有属性。

它是否正确?

为冗长而道歉,我只是在今晚的实践中真正了解了无模式实际上意味着什么......

4

2 回答 2

12

在我看来,如果我想要交易(基于每个用户),我将需要某种根用户实体作为所有实体的父级,这些实体是她的数据层次结构的一部分,无论这个实体有多薄实际上,即基本上没有属性。

我不会只创建一个根用户实体并将所有内容都放入其实体组中。想想你需要交易做什么。如果你的用户实体没有属性,你会在交易中使用它吗?

我不知道你的数据,但我们假设它是一个博客系统,你有用户、帖子和评论。Post 模型包含一个 number_of_comments,因此您不必计算它们。您可能希望事务确保在创建评论时可以安全地更新 number_of_comments 属性。

在这种情况下,让所有用户在单个实体组中发布和评论将是不必要的开销。相反,您可以将评论发布在与它们所属的帖子相同的实体组中。没有必要将帖子与用户放在同一个组中,实际上这不是一个好主意,因为发布在任何用户帖子中的评论都将竞争写入同一个实体组。

我今天在我的博客上写了一篇关于实体组的短文。你可能会发现它很有用。

于 2010-01-06T21:26:32.010 回答
3

你基本上是正确的。如果您需要事务能力,则需要对它们进行分组。但是,您可以将多个实体组合在一起,而无需创建实际的根实体,就数据存储中的实体而言。相反,您创建了一种虚拟根实体。此功能的一个重要用例是能够在创建父对象之前创建子对象。

您可以创建具有祖先路径的实体,而无需先创建父实体。为此,您使用种类和键名为祖先创建一个键,然后将其用作新实体的父级。具有相同根祖先的所有实体都属于同一个实体组,无论路径的根是否代表实际实体。

该报价来自您链接到的同一个文档

于 2009-10-30T21:05:25.687 回答