0

Google App Engine データストアをモデル化する方法に関する一般的な質問。エンティティ グループの部分について混乱しています。たとえば、ユーザー、投稿、およびコメントの 3 つのエンティティがある Facebook の例を見てみましょう。

今のところ、それをどのように実装するかは、従来の RDBMS と同じです。各 Post には userId プロパティがあり、各 Comment には postId プロパティと userId プロパティがあり、クエリを介して相互にリンクします。エンティティ グループは使用しません。しかし、投稿はユーザーなしでは生きられず、コメントは投稿なしでは生きられないので、これはエンティティグループにとって良い場所だと思います。投稿がユーザーの子になるように設定しますか? コメントは投稿とユーザーの子ですか??

繰り返しになりますが、エンティティ グループをいつ使用するかについて、私は混乱しています。

**更新: Java を使用しています

4

2 に答える 2

1

エンティティ グループには、高レプリケーション データストアで 1 秒あたり 1 書き込みのソフト リミットがあることを知っておく必要があります。モデリングの選択肢を作成するときは、このことに留意してください。

エンティティ グループを使用する正当な理由は、クエリの一貫性を維持したり、複数のモデルをトランザクションで更新したりするためです。トランザクションを使用して 1 つ以上のモデルを更新する必要がある場合、それらは同じエンティティ グループに属している必要があります (ただし、一度に最大 5 つの異なるグループをサポートするクロス グループ トランザクションがあります)。強力な一貫性のあるクエリ (既定では最終的に一貫性のあるクエリではない) を実行する場合は、クエリで親を指定する必要があります。強整合性の詳細については、こちらをご覧ください

エンティティ グループの使用については、こちらをご覧ください。

説明したように関係をモデル化できますが、ndb.KeyPropertyまたはを使用db.ReferencePropertyして、あるモデルから別のモデルを参照することもできます。

JAVA の更新com.google.appengine.api.datastore.Key上記でエンティティ グループについて述べたことは、モデル間でオブジェクトを参照するために 使用する場合を除いて、JAVA だけでなく Python にも当てはまります。

繰り返しになりますが、JAVA/Python の両方で、データが単一のノードに保持されるため、単一のエンティティ グループ内のすべてのエンティティをより高速に取得できると思います (これは M/S データストアで当てはまりましたが、HRD については不明です)。ここから:

エンティティ グループの関係は、分散ネットワークの同じ部分に複数のエンティティを格納するように App Engine に指示します。

于 2013-04-11T13:49:02.220 に答える
0

Pythonを使用していると思いますか?使用する必要がある NDB を使用する場合は、「外部 ID」またはキーをキー プロパティ リストとして保存できます。

message = ndb.KeyProperty(kind=Message, repeated=True) 

しかし、たくさんあるのでオプションを読んでください;)

https://developers.google.com/appengine/docs/python/ndb/properties

于 2013-04-11T13:39:55.830 に答える