繁体   English   中英

Google App Engine数据存储区建模

[英]Google App Engine Datastore Modeling

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

现在,我将如何实现它就像传统的RDBMS。 每个帖子都有一个userId属性,每个注释都有一个postId属性和userId属性,我将通过查询将它们彼此链接。 我不使用任何实体组。 但是,我觉得这对实体组来说是个好地方,因为如果没有用户,帖子就无法生存,而如果没有帖子,评论就不能生存。 我是否将帖子设置为Users的子代? 和评论是帖子和用户的子代??

再次明确地说,我对何时使用实体组感到困惑。

**更新:我正在使用Java

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

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

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

您可以按照描述的方式对关系进行建模,但是也可以使用ndb.KeyPropertydb.ReferenceProperty从一种模型引用到另一种模型。

JAVA的更新我上面对实体组说的话对JAVA和python都适用,只是您将使用com.google.appengine.api.datastore.Key来引用模型之间的对象。

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

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

我搜集到您正在使用python? 如果使用应使用的NDB,则可以将“外国ID”或密钥存储为密钥属性列表

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM