Google Appengine NDB祖先vs关键查询

top*_*ess 10 python google-app-engine app-engine-ndb

我将实体的密钥存储为另一个实体的属性以便将它们关联起来.我们在项目的这个阶段处于重构阶段,所以我在考虑引入祖先.这两种方法之间是否存在性能差异?如果我们介绍祖先,我可能获得的任何优势?

class Book(ndb.Model):
  ...

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


book_key =  ndb.Key("Book", 12345)
Run Code Online (Sandbox Code Playgroud)

第一个祖先查询方法

qry = Article.query(ancestor=book_key)
Run Code Online (Sandbox Code Playgroud)

第二种简单的密钥查询方法

qry = Article.query(book_key=book_key)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 15

祖先查询将始终完全一致.book_key另一方面,查询不一定是一致的:您可能会发现最近的更改不会显示在该查询中.

另一方面,引入祖先会对更新次数施加限制:您每秒只能对任何实体组(即祖先及其子级)执行一次更新.

对于您的应用程序中哪一个更重要,这是一个权衡.

  • 你应该期望每秒写1次,但实际上可能稍微多一点.我无法找到包含此编号的表格,但请查看https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency上的最后一段,并在此处进行更多讨论https:// groups .google.com /论坛/#!主题/谷歌的AppEngine/llEXU-B3dQ4 (2认同)