【问题标题】:Google App Engine: Datastore parent key confusionGoogle App Engine:数据存储区父键混淆
【发布时间】:2013-11-05 17:45:38
【问题描述】:

我目前正在了解有关 Google App Engine 数据存储的更多信息,但我对自己对定义父键概念的理解有些怀疑。现在,这是 GAE 文档中定义父密钥的代码:

def guestbook_key(guestbook_name="default"):
    """Constructs a Datastore key for a Guestbook entity with guestbook_name."""
    return ndb.Key('Guestbook', guestbook_name)

注意:此代码包含在应用程序的源代码中,该应用程序接受来自用户的条目并将其存储在数据存储中并在主页上集中显示。

现在,这就是我从这段代码中所理解的(如果我对这个概念的理解不符合预期,请纠正我):

“guestbook_key”函数为用户提交到数据存储区的所有帖子定义了一个父键,我们将其命名为“默认”。所以基本上,用户提交的所有帖子都存储在一个名为“Guestbook”的实体中,我们为它的父级(不存在)定义一个名为“default”的键。

请纠正我的理解错误。

【问题讨论】:

    标签: database google-app-engine python-2.7 parent-child


    【解决方案1】:

    这真的取决于你如何使用这个键。现在,它只是一个名字。如果您 put() 它,您将使用名称为“default”的 Guestbook 类型。

    但是,如果您将它用作父级,那么您的代码可能如下所示:

    post = Post(parent=guestbook_key())
    post.comment = "This is a new post!"
    post.put()
    

    在这种情况下,新的Post 对象将具有名称为“default”的Guestbook 对象作为父对象。然后,您可以使用ancestor query 获取给定留言簿的所有Posts。

    您可能选择这样做的原因(而不是,例如,在每个帖子上都有一个带有留言簿名称的属性)是它保证strongly consistent 结果。这基本上允许所有请求查看留言簿的一致视图。如果您没有高度一致的结果,您可能会看到用户写了帖子但当他们查看留言簿时却没有出现的情况。

    您是正确的,您实际上不需要创建Guestbook 实体。当你定义一个父键时,它实际上是在创建一个parent key is a prefix of the child key 所在的键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2011-02-16
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多