2013-06-19 11 views
10

エンティティのキ​​ーを関連付けるために、別のもののプロパティとしてエンティティのキ​​ーを保存しています。私たちはプロジェクトのこの時点でリファクタリング段階に入っていますので、私は祖先の導入について考えていました。 2つの方法のパフォーマンスに違いはありますか?私たちが祖先を導入すれば、私が得られる利点はどれですか?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) 

第一祖先クエリアプローチ

qry = Article.query(ancestor=book_key) 

2ST簡単なキーのクエリアプローチ

qry = Article.query(book_key=book_key) 

答えて

15

祖先クエリは、常に完全に一致となります。一方、book_keyによるクエリは必ずしも一貫しているとは限りません。最近の変更がそのクエリに表示されないことがあります。

一方、祖先を導入すると、更新回数に制限があります。エンティティグループ(つまり、祖先とその子孫)に対しては、1秒あたり1回の更新しか実行できません。

あなたのアプリケーションでは、どちらが重要かはあなたとのトレードオフです。

+0

ドキュメントに制限(1つの更新/エンティティグループ/秒)が表示されませんでした。リンクを提供できますか?恐ろしいクォータの何か! – rattray

+2

実際には若干多いかもしれませんが、1秒あたり1回の書き込みが必要です。この番号の表は見つかりませんでしたが、https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistencyの最後の段落やhttps:// groupsの詳細についてはこちらをご覧ください.google.com/forum /#!topic/google-appengine/llEXU-B3dQ4 –

関連する問題