2011-12-26 39 views

回答

4

這是在關係數據庫中執行JOIN(在MongoDB中無法完成的操作)的一種方法。

例如,您可以將MongoDB文檔作爲博客文章,並在其中嵌入評論列表。

然後你可以(例如):

  • 在一個單一的查詢負載後和評論
  • 搜索具有回覆的帖子
  • 搜索用戶A哪些職位由用戶B的回覆
  • 在一個事務中更新原子員額和評論

所有這一切是不可能的(或在LEA如果評論作爲單獨的文檔存儲在他們自己的收藏中,則很困難)。

+0

好的,我明白了。因此,使用您的博客帖子示例,假設我想爲帖子存儲標籤。我可以在博客文章中嵌入一個標籤列表,這將節省我搜索特定博客文章標籤的整個集合。如果我還爲標籤創建了一個集合,那麼我可以計算標籤的使用次數呢?因此,在帖子中嵌入標籤併爲具有計數的標籤分別收集標籤。將MongoDB的能夠處理所有職位查詢計數的次數使用了特定的標籤?或者是一個單獨的標籤集合適合? – Santiago 2011-12-26 02:28:51

+0

「mongoDB能夠處理所有帖子的查詢來計算特定標籤的使用次數嗎?」。是的,您可以統計所有使用該標籤的文檔。如果標籤被索引,那也應該很快。 – Thilo 2011-12-26 05:09:10

2

簡單來說,嵌入如果它不是一個頂級對象,如果它沒有複雜的人際關係,是否會有大量的重複數據,如果你沒有嵌入,如果你的文檔變得更大然後幾兆。

從MongoDB的網站摘自:最佳實踐的http://www.mongodb.org/display/DOCS/Schema+Design

摘要

  • 嵌入「一流」的目標,是在頂層,通常有自己的收藏。
  • 通常會嵌入訂單項明細對象。
  • 通常應該嵌入跟隨對象建模「包含」關係的對象。
  • 多對多關係通常通過鏈接完成。
  • 只有少數對象的集合可以作爲單獨的集合安全地存在,因爲整個集合可以快速緩存在應用程序服務器內存中。
  • 嵌入對象比集合中的「頂級」對象鏈接有點困難。
  • 獲取嵌入式對象的系統級視圖更加困難。在需要時,通過使用MongoDB的map/reduce工具來執行這種操作。
  • 如果要嵌入的數據量很大(很多兆字節),則可能會達到單個對象大小的限制。另請參閱GridFS。
  • 如果性能問題,嵌入。