2013-06-19 71 views
10

我将一个实体的关键字存储为另一个实体的关键以便将它们关联起来。在这个项目中,我们正在进行重构阶段,所以我正在考虑引进祖先。 这两种方法之间是否存在性能差异?如果我们介绍祖先,我可能获得哪些优势?Google Appengine NDB祖先与关键查询

class Book(ndb.Model): 
    ... 

class Article(ndb.Model: 
    book_key = ndb.KeyProperty(kind=Book, required=True) 


book_key = ndb.Key("Book", 12345) 

1日祖先查询方法

qry = Article.query(ancestor=book_key) 

2ST简单的键查询方法

qry = Article.query(book_key=book_key) 

回答

15

祖先查询将永远是完全一致的。另一方面,由book_key查询不一定是一致的:您可能会发现最近的更改将不会显示在该查询中。另一方面,引入祖先对更新次数施加限制:每秒只能对任何实体组(即祖先及其子)执行一次更新。

这对你来说是一种权衡,以确定哪一个在你的应用中更重要。

+0

我没有看到文档中的限制(1更新/实体组/秒) - 你能提供一个链接吗?一些可怕的配额! – rattray

+2

你应该期望每秒写1次,尽管在实践中可能会稍微多一点。我无法找到包含此号码的表格,但请查看https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency上的最后一段以及https://组的更多讨论.google.com /论坛/#!主题/谷歌的AppEngine/llEXU-B3dQ4 –