【问题标题】:Google App Engine Datastore ModelingGoogle App Engine 数据存储建模
【发布时间】:2013-04-11 13:11:08
【问题描述】:

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

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

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

**更新:我正在使用 Java

【问题讨论】:

    标签: java google-app-engine nosql google-cloud-datastore


    【解决方案1】:

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

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

    您可以阅读有关实体组使用情况here

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

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

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

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

    【讨论】:

    • 所以可以肯定地说我建议的没有实体组的方式可以吗??
    • 是的,但是你不需要显式地制作id字段,你可以使用与每个实体关联的键
    • 是的,我可以使用 ID 字段,但是为了将评论链接到帖子,我仍然需要在评论实体中显式声明 postId 字段(这是与帖子关联的键实体)。你同意吗?
    • 我的意思是,数据存储中的每个实体都会自动分配一个 Key。我认为这在 python 中与在 JAVA 中不同,并且取决于 JDO 与 JPA 的方式等。此链接显示了如何使用 JDO 进行建模,您可以在其中为对象提供一个关键字段,但它看起来会自动生成. developers.google.com/appengine/docs/java/datastore/jdo/…
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 如果你知道你必须是相对较小(大小有界)的集合,重复的属性是可以的。请记住,实体的大小限制为 1Mb。所以这些往往不会扩展。实体组确实可以轻松地使用祖先查询来查询所有子项。但是,如果您在实体组中有大量并发写入,那么您将增加写入冲突的可能性。所以这些都是影响设计的因素
    • 我想我应该删除我的答案?
    • 它仍然相关,OP 需要了解不同的方法。他以 facebook 为例 ;-)
    • 根据我的研究,我认为这不是一个好的答案。实体组似乎对于保持一致性以及降低访问数据的成本至关重要。
    猜你喜欢
    • 2012-12-20
    • 2011-05-26
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2011-02-16
    • 2013-12-03
    相关资源
    最近更新 更多