1

私は(今日)NoSql MongoDbを初めて使用し、Morphiaを理解しようとしています。
次のような @Entity が 1 つ必要です。


Stat
Friendlist
Userdataという名前の 3 つのテーブル (コレクション) がある場合
、UserData.Class を Userdata に保存し、Statistic.Class を Stat に保存します...

私の考えは、各ユーザーに一意の ObjectId UUID nr を与えてから、この UUID nr を ObjectId として持つすべての Statistic と FriendList を与えることでした。プログラムが統計のみを実行する必要がある場合、統計のみに対してロード/動作するためです。

@Entity
public class UserData {

    @Id private ObjectId id = "UUID 123456789;
    public String userName = "";
    public String password = "";    
    @Embedded
    private Statistic statistic;
    @Embedded
    private FriendList friendList;
}

UserData を取得するための 18000/時間のリクエストがある場合、次のように宣言する方が速くないでしょうか:
(同じ ObjectId を使用し、それらは別々のコレクション (テーブル) に保存されます)

@Entity
public class UserData {

    @Id private ObjectId id = "UUID 123456789;
    public String userName = "";
    public String password = "";
}

@Entity
public class Statistic {

    @Id private ObjectId id = "UUID 123456789;
    public int loginTimes;
    public String gps;

}

@Entity
public class FriendList {

    @Id private ObjectId id = "UUID 123456789;
    public ArrayList<String> fiends;
}
4

2 に答える 2

2

DBRefまたはEmbeddedを使用するのが正しいと思います。

他のオブジェクトにもリストのオブジェクトが必要な場合はDBRefを使用し、そうでない場合はembeddedを使用してください。

たとえば、ブログ投稿では、コメントは別の投稿で使用されることはないため、埋め込まれます。

したがって、次のようなものを使用します。

@Entity
public class UserData {

@Id private ObjectId id = "UUID 123456789;
public String userName = "";
public String password = "";    
@Embedded
private Statistic statistic;
@Embedded
private List<Friends> friendList;
}

それが役に立てば幸い。

于 2011-09-21T12:49:27.070 に答える
0

参照は別の物理的な場所に保存されるため、埋め込みは常に高速です。

于 2012-09-22T02:17:23.320 に答える