AppEngine の NDB データストアでは、オブジェクトを相互に関連付ける方法が 2 つあります。親/祖先のキーndb.KeyProperty
があります。いつどちらを使用するべきかについて少し混乱していますか?
今KeyProperty
は一番使い慣れているので、もっぱら使っていますが、どちらがより適しているのか知りたいです。
AppEngine の NDB データストアでは、オブジェクトを相互に関連付ける方法が 2 つあります。親/祖先のキーndb.KeyProperty
があります。いつどちらを使用するべきかについて少し混乱していますか?
今KeyProperty
は一番使い慣れているので、もっぱら使っていますが、どちらがより適しているのか知りたいです。
祖先は階層的です - 物事の間に階層的な関係がある場合に使用できます(たとえば、フォーラムシステムでは、sを持っているsを持っているかもしれませんForum
)。Topic
Post
KeyProperty
本質的に階層的ではなく、リンクを提供するだけです。アイテム間の非階層的なリンクに使用する必要があります。前の段落のフォーラムの例を再利用すると、 a を使用して作成者KeyProperty
にリンクできます - s はフォーラム-トピック-投稿階層にないためです。それらは 3 つすべてに関連しています (たとえば、投稿を作成したり、トピックを作成したり、フォーラムを管理したりする場合があります)。Post
User
User
User
ただし、最終的に祖先とキーの間の主なトレードオフは、一貫性とスループットにあります。祖先ベースのクエリは、最近の更新と比較して強力な一貫性を提供しますが、特定のエンティティ グループに対して 1 秒あたり 1 回の変更と最大 1 回の変更という制限を課します。配布不足によるグループのサイズ制限。