11

AppEngine の NDB データストアでは、オブジェクトを相互に関連付ける方法が 2 つあります。親/祖先のキーndb.KeyPropertyがあります。いつどちらを使用するべきかについて少し混乱していますか?

KeyPropertyは一番使い慣れているので、もっぱら使っていますが、どちらがより適しているのか知りたいです。

4

1 に答える 1

17

祖先は階層的です - 物事の間に階層的な関係がある場合に使用できます(たとえば、フォーラムシステムでは、sを持っているsを持っているかもしれませんForum)。TopicPost

KeyProperty本質的に階層的ではなく、リンクを提供するだけです。アイテム間の非階層的なリンクに使用する必要があります。前の段落のフォーラムの例を再利用すると、 a を使用して作成者KeyPropertyにリンクできます - s はフォーラム-トピック-投稿階層にないためです。それらは 3 つすべてに関連しています (たとえば、投稿を作成したり、トピックを作成したり、フォーラムを管理したりする場合があります)。PostUserUserUser

ただし、最終的に祖先とキーの間の主なトレードオフは、一貫性とスループットにあります。祖先ベースのクエリは、最近の更新と比較して強力な一貫性を提供しますが、特定のエンティティ グループに対して 1 秒あたり 1 回の変更と最大 1 回の変更という制限を課します。配布不足によるグループのサイズ制限。

于 2013-11-06T03:17:59.870 に答える