强制性博客示例设置; Authors
有Posts
class Author(db.Model):
name = db.StringProperty()
class Post(db.Model):
author = db.ReferenceProperty()
article = db.TextProperty()
bob = Author(name='bob')
bob.put()
要记住第一件事是在一个单一的实体组(包括单一实体),经常GET/PUT /删除将作为预期:
post1 = Post(article='first article', author=bob)
post1.put()
fetched_post = Post.get(post1.key())
# fetched_post is latest post1
你只能通知如果您开始在多个实体组之间进行查询,则会出现不确定性。除非您已指定parent
属性,否则您的所有实体都位于不同的实体组中。所以,如果重要的是后直bob
创建了一个帖子,说他可以看到有自己的职位的话就要小心了以下内容:
fetched_posts = Post.all().filter('author =', bob).fetch(x)
# fetched_posts _might_ contain latest post1
fetched_posts
威力包含来自bob
最新post1
,但它可能不。这是因为所有Posts
都不在同一个实体组中。当在HR中这样查询时,你应该认为“可能是我的最新帖子”。
由于作者在创建后可以在列表中直接看到他的帖子,因此我们将使用parent
属性将它们绑定在一起,并使用ancestor
查询来仅从该内容中获取帖子组:
post2 = Post(parent=person, article='second article', author=bob)
post2.put()
bobs_posts = Post.all().ancestor(bob.key()).filter('author =', bob).fetch(x)
现在我们知道这post2
将在我们bobs_posts
结果。
如果我们的查询的目的是为了获取“可能所有最新的帖子+鲍勃最新的帖子”我们需要做另一个查询。
other_posts = Post.all().fetch(x)
那么结果other_posts
和bobs_posts
合并在一起,以获得所需的结果。
对不起,我没有一个具体的例子。我在学习这个系统,所以我可以开始做我的项目。我只想将数据存储在数据存储中,并在需要时检索最新版本。我只是想弄清楚什么时候不是这种情况,以及我如何保证在查询结果时我会得到最新的结果。通过“查询”我的意思是通过属性查询,就像SQL中的一样,而不是按键。我只想了解祖先团体的意思是“一致性的单位”,什么可以是“不一致的”。 – amatsukawa 2011-05-30 19:43:43
Nick,在此文档的使用说明部分:http://code.google.com/intl/zh-CN/appengine/docs/python/datastore/hr/overview.html说,“您可以将最近发布的内容放入memcache中过期,然后显示来自memcache的最近发布的帖子和从数据存储中检索的帖子。“ – fjsj 2011-09-07 13:31:20
@ user439383(你有没有考虑过设置一个更有用的用户名?)我个人不会再担心这件事,除非你有特定的情况它是关心的。最终一致的语义在大多数情况下都很好,你会知道什么时候需要强大的一致性。 – 2011-09-08 00:45:09