0

数日から App Engine を使用しています。今、私にとって最も重要なのはモデリング データです。それについていくつか質問があります。MyUser私は単純なクラスを持っているとしましょう。私Buddyもそのようなクラスを持っています:

@Entity
public class Buddy {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Key id;
  private Date createAt;
  private MyUser user;
  private Key buddyOf;
}

このクラスにはMyUser、すべてのバディがユーザーであるためフィールドがあり、バディ リストにこのバディを持つ別の MyUser があるため、buddyOf フィールドがあります。問題は、Datastore から 1 つのサンプル バディを入手した場合、これも入手MyUserできるかどうかです。はいの場合、いつMyUserクラスに別のものが埋め込まれEntity、その中にもうEntity1つなど...? たぶん、Keyフィールドだけを他のエンティティに永続化する必要がありますか? 主な質問は、データストアにデータを保存する方法ですか? コンポジションを使用する必要があり、他のオブジェクト内にオブジェクトがありますか? はいの場合、オブジェクト内のオブジェクト内のオブジェクトなどについて...最善のアプローチは何ですか?

4

2 に答える 2

1

あなたはn:mの関係をモデル化していると思います。次のような構造を作成できます。

  • MyUserエンティティごとに、要素タイプがBuddyのエンティティのグループがあります(このグループは、このMyUserエンティティのすべてのバディを表します)。
  • 各バディエンティティには、その祖先としてMyUserエンティティがあります。
  • 各バディエンティティは、フィールド(他のMyUserのID)を含めることにより、所有者のMyUserと別のMyUserオブジェクトの間の関係を表します。

したがって、データストアを使用すると、次の操作が簡単かつ自然になります。

  • MyUserエンティティにバディを追加/削除します(新しい子バディエンティティを追加/削除するだけです)
  • MyUserエンティティのすべてのバディをクエリします(すべての子を一覧表示します)

この構造には、gae-datastorehighreplacaにいくつかの利点があります。たとえば、バディ(子エンティティ)をMyUserエンティティに追加すると、同じエンティティグループに属しているため、すぐにクエリを実行できます(常に一貫したデータが遅滞なく表示されます)。

于 2012-10-09T03:06:57.077 に答える
1

DataStore オブジェクト モデルの設計は、リレーショナル データベースに通常使用される設計とは異なる必要があります。プロパティのサポートされている型を確認する必要がありますhttps://developers.google.com/appengine/docs/java/datastore/entities#Properties_and_Value_Typesプロパティ型としてのオブジェクトはありません。埋め込み注釈を使用することはできますが、それはあなたの場合には最善の方法ではありません。

参照としてユーザーのキーまたは ID を保存する必要があります。インスタンスを小さくし、説明した問題を解決します。ただし、参照整合性に到達することはできません。これは NoSQL 設計の制限です。

于 2012-10-09T00:53:31.263 に答える