有关如何对 Google App Engine 数据存储区进行建模的一般问题。我对实体组部分感到困惑。让我们以 Facebook 为例,其中有 3 个实体:用户、帖子和评论。
现在我的实现方式就像传统的 RDBMS 一样。每个帖子都有一个 userId 属性,每个评论都有一个 postId 属性和 userId 属性,我将通过查询将它们链接回彼此。我不使用任何实体组。但是,我觉得这对于实体组来说是一个好地方,因为帖子不能没有用户而存在,评论不能没有帖子而存在。我是否可以将其设置为帖子是用户的子级?评论是帖子和用户的子项??
再次澄清一下,我对何时使用实体组感到困惑。
**更新:我正在使用 Java
最佳答案
您应该知道,实体组在高复制数据存储上的软限制为每秒 1 次写入。创建建模选择时请记住这一点
使用实体组的一个很好的理由是为了一致的查询或以事务方式更新多个模型。如果需要使用事务更新 1 个或多个模型,它们必须属于同一实体组(尽管现在有跨组事务,一次最多支持 5 个不同的组)。如果要执行强一致查询(默认情况下不是最终一致查询),则需要在查询中指定父级。了解有关强一致性的更多信息 here
您可以阅读有关实体组使用情况的信息 here
您可以按照您所描述的方式对关系进行建模,但您也可以使用 ndb.KeyProperty
或db.ReferenceProperty
从一种模型引用到另一种模型。
JAVA 更新
我上面所说的实体组对于 JAVA 和 python 来说都是正确的,除了你会使用 com.google.appengine.api.datastore.Key
在模型之间引用对象。
同样,对于 JAVA/Python,我相信单个实体组中的所有实体都可以更快地检索,因为数据保存在单个节点上(对于 M/S 数据存储来说是这样,不确定 HRD)。来自 here :
Entity group relationships tell App Engine to store several entities in the same part of the distributed network.
关于java - Google App Engine 数据存储建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15949698/