2011-09-21 69 views
1

Im新(今天)到NoSql MongoDb並試圖理解Morphia。
我想有一個@Entity這樣的:速度最快,@Entity或@Embedded?

如果我有3個表(集合)命名
統計
好友列表
使用用戶數據
我保存UserData.Class在統計使用用戶數據的權利和Statistic.Class等等......

我的想法是,如果我給每個用戶一個唯一的ObjectId UUID nr,然後每個統計信息和FriendList有這個UUID nr那裏ObjectId。因爲如果程序只需要運行統計信息,它只會加載/運行統計信息。

@Entity 
public class UserData { 

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

如果有喜歡的18000 /小時的要求得到的UserData豈不是更快地宣佈他們是這樣的:
(我用同樣的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; 
} 

回答

2

我認爲,正確的是使用DBREF或嵌入。

如果你想在其他對象列表中的某個對象太大,使用DBREF,如果不是,採用嵌入式。

例如,在一篇博客文章中,評論將永遠不會在另一篇文章中使用,因此,它的嵌入。

因此,使用像服用點:

@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; 
} 

希望它幫助。

+0

的統計與好友列表可以在室外使用,f.ex如果我只是想收集統計我會要求所有的統計從名爲「STAT」的(文件)表和使用的ObjectId的統計裏面找出誰該的UserData貝隆格。這是不是更好,那麼必須得到所有的用戶數據,因爲統計是在用戶數據,也許我想錯了... – Erik

+0

嗯..如果我理解你的權利,嘗試像我說的那樣做,但是,使用dbref註釋,而不是嵌入好友列表...嗎啡自動做你想做的手動,當然,如果我明白你的權利..我的英語不是那麼好:)。測試它,並說出你得到的。 – caarlos0

+0

我需要閱讀dbref ... – Erik

0

由於引用存儲在不同的物理位置,因此嵌入始終更快。

+0

什麼?我不明白。 –