1

私は現在、Google App Engine データストアについて詳しく学んでいますが、親キーを定義するという概念を理解しているか疑問があります。ここで、GAE ドキュメントから親キーを定義するためのコードを次に示します。

def guestbook_key(guestbook_name="default"):
    """Constructs a Datastore key for a Guestbook entity with guestbook_name."""
    return ndb.Key('Guestbook', guestbook_name)

注: このコードは、ユーザーからの入力を受け付けてデータストアに保存し、それらをまとめてホームページに表示するアプリケーションのソース コードに含まれています。

さて、これは私がこのコードから理解していることです(この概念に対する私の理解が本来あるべきものではない場合は修正してください):

「guestbook_key」関数は、ユーザーがデータストアに送信するすべての投稿に対して、「default」と名付けた親キーを定義します。したがって、基本的に、ユーザーによって送信されたすべての投稿は「Guestbook」という名前のエンティティに保存され、「default」という名前の親 (存在しない) のキーを定義します。

私の理解が間違っていたところを修正してください。

4

1 に答える 1

0

これは、このキーをどのように使用するかによって大きく異なります。今のところ、名前だけです。もしそうなら、 「デフォルト」という名前put()のタイプを入れています。Guestbook

ただし、親として使用している場合は、次のようなコードになる場合があります。

post = Post(parent=guestbook_key())
post.comment = "This is a new post!"
post.put()

この場合、新しいPostオブジェクトはGuestbook「default」という名前のオブジェクトを親として持ちます。次に、祖先クエリPostを使用して、特定のゲストブックのすべての を取得できます。

これを選択する理由 (たとえば、各投稿にゲストブックの名前のプロパティを設定するのではなく) は、強い一貫性のある結果が保証されるためです。これにより、基本的にすべてのリクエストがゲストブックの一貫したビューを表示できるようになります。強い一貫性のある結果が得られなかった場合、ユーザーが投稿を書いても、ゲストブックを見ても表示されない場合があります。

Guestbook実際にエンティティを作成する必要がないことは正しいです。親キーを定義すると、実際には、親キーが子キーのプレフィックスであるキーが作成されます。

于 2013-11-05T18:10:14.583 に答える