2014-01-07 39 views
0

我對MongoDB完全陌生,並且正在研究將基礎持久性代碼(對於許多項目)使用JDO作爲不可知的層移動到它。所以我從一個喜歡使用bean作爲基本模型單元的java開發人員的角度來問這個問題。MongoDB是否使用相同的數據複製子文檔?

我的問題是關於子文檔以及它們是獨立存在還是由MongoDB內部整合。即,如果我有一個域結構是這樣的:

家用 - 採集者

Person 
- name 
- address 

Address 
- street 
- postcode 

。如果我有一個文件爲一個家庭,將有多個個人,但每個人都會有相同的地址。

MongoDB中的每個地址是不同的獨立實體(即使它們是相同的'類'並且具有相同的值。或者Mongo以某種方式識別它們指的是同一個實體並在內部存儲UID每個地址?

更重要的是,如果我更新一個地址的郵政編碼是否意味着家庭的地址子文檔的每個成員都將反映這種變化?

看來,如果是的話那麼它誤入關係領域,而且沒有這樣的參考,我可以看到可怕的低效率產生?

回答

0

Mongo不會爲你重複刪除這些子文檔,不會。如果要規範化數據,則需要將這些地址保存到不同的集合中(理想情況下),並在保存封閉文檔時將DBRefs存儲到這些文檔。使用類似morphia或spring-data的東西可以幫助您管理這些引用。

1

如果通過JDO持久保存數據,您可以選擇將Person +地址嵌入到Household中,或者作爲單獨的對象持久保存(就像您使用RDBMS一樣)。如果存儲爲未嵌入,則無論您是否擁有同一個人的多個副本,或多個家庭引用的單個副本,都取決於您。如果以嵌入方式存儲,則它們被嵌入,因此,部分家庭,因此信息被複制。

相關問題