0

有关如何为 Google App Engine 数据存储区建模的一般问题。我对实体组部分感到困惑。让我们以一个 Facebook 示例为例,其中有 3 个实体:用户、帖子和评论。

现在我将如何实现它就像一个传统的 RDBMS。每个 Post 都有一个 userId 属性,每个 Comment 都有一个 postId 属性和 userId 属性,我将通过查询相互链接。我不使用任何实体组。但是,我觉得这对于实体组来说是一个好地方,因为没有用户,帖子就无法生存,没有帖子,评论就无法生存。我会以帖子是用户的孩子的方式进行设置吗?和评论是帖子和用户的孩子?

再一次,为了清楚起见,我对何时使用实体组感到困惑。

**更新:我正在使用 Java

4

2 回答 2

1

您应该知道,实体组在 High Replication 数据存储上的软限制为 1 次写入/秒。在创建建模选择时请记住这一点

使用实体组的一个很好的理由是进行一致的查询或以事务方式更新多个模型。如果您需要使用事务更新 1 个或多个模型,它们必须属于同一个实体组(尽管现在有一次最多支持 5 个不同组的跨组事务)。如果要执行强一致查询(默认情况下不是最终一致查询),则需要在查询中指定父级。在此处阅读有关强一致性的更多信息

您可以在此处阅读有关实体组使用情况的信息

您可以按照您的描述建模关系,但您也可以使用ndb.KeyPropertydb.ReferenceProperty从一个模型引用到另一个模型。

JAVA 更新 我上面所说的实体组对 JAVA 和 python 都是正确的,除了你会用来com.google.appengine.api.datastore.Key在模型之间引用对象。

同样,对于 JAVA/Python,我相信单个实体组中的所有实体都可以更快地检索,因为数据保存在单个节点上(M/S 数据存储确实如此,不确定 HRD)。从这里

实体组关系告诉 App Engine 将多个实体存储在分布式网络的同一部分。

于 2013-04-11T13:49:02.220 回答
0

我收集你正在使用python?如果您使用应该使用的 NDB,则可以将“外国 id”或键存储为键属性列表

message = ndb.KeyProperty(kind=Message, repeated=True) 

但是请阅读选项,因为有很多;)

https://developers.google.com/appengine/docs/python/ndb/properties

于 2013-04-11T13:39:55.830 回答