現在、私のコードの多くは祖先を広範囲に使用してオブジェクトを配置およびフェッチしています。しかし、私はいくつかのものを変えようとしています。
私は当初、探しているエンティティの祖先が誰であるかを知っていれば、祖先がクエリを高速化するのに役立つと考えていました。しかし、祖先は主にトランザクションのサポートに役立つことがわかったと思います。私はトランザクションを利用しないので、先祖は助けというよりも、ここのシステムに負担をかけているのではないかと思っています。
私が持っているのは、ユーザーエンティティと、コメント、タグ、友達などの他の多くのエンティティです。ユーザーは多くのコメント、タグ、およびフレンドを作成できるため、ユーザーが作成するたびに、これらすべての新しく作成されたオブジェクトの祖先をユーザーとして設定します。
したがって、コメントを作成するときに、祖先をユーザーとして設定します。
comment = Comment(aUser, key_name = commentId)
私がこれを行っている唯一の理由は、厳密にクエリの目的のためです。特定のユーザーによるすべてのコメントを取得したい場合は、authorEmail = userEmail のすべてのコメントをクエリするよりも、共通の祖先を持つすべてのコメントを取得する方が速いと思いました。
したがって、特定のユーザーによるすべてのコメントを取得したい場合は、次のようにします。
commentQuery = db.GqlQuery('SELECT * FROM Comment WHERE ANCESTOR IS :1', userKey)
だから私の質問は、これは先祖の良い使い方ですか?代わりに、各コメントに、コメントを作成したユーザー オブジェクトを参照する ReferenceProperty を持たせ、それによってフィルター処理する必要がありますか?
(また、インデックス付きの ReferenceProperty の代わりに先祖を使用すると、書き込みコストが節約されると考えていました。ここで間違っていますか?)