【轉】MongoDB 數據模型設計

轉自:https://blog.csdn.net/maoyeqiu/article/details/48847165

MongoDB 數據模型設計

一個高效的數據模型能夠很好的滿足你應用程序的需求。設計一個文檔數據結構最關鍵的考量就是決定是否使用嵌入式還是引用。 
1. 內嵌式數據模型 
在MongoDB裏面,你可以把相關的數據包括在一個單個的結構或者文檔下面。這樣的數據模式也叫做 “非規範化” 模式,它充分利用了MongoDB的靈活文檔格式的功能。以下圖爲例: 
嵌入式文檔

內嵌數據可以讓應用程序把相關的數據保存在同一條數據庫記錄裏面。這樣一來,應用程序就可以發送較少的請求給MongoDB數據庫來完成常用的查詢及更新請求。 
一般來說,下述情況建議使用內嵌數據: 
- 數據對象之間有 “contains” (包含) 關係。  
- 數據對象之間有一對多的關係。 這些情況下 “多個”或者子文檔會經常和父文檔一起被顯示和查看。 
通常情況下,內嵌數據會對讀操作有比較好的性能提高,也可以使應用程序在一個單個操作就可以完成對數據的讀取。 同時,內嵌數據也對更新相關數據提供了一個原子性寫操作。 
然而, 內嵌相關數據到同一個文檔內會很容易導致文檔的增長。 文檔增長會影響寫性能並導致數據碎片問題。更多信息請參見 文檔增長性。另外, MongoDB的文檔大小必須小於16M。 超過這個大小的話,你可以考慮使用 GridFS。 
當需要訪問內嵌的數據時,你可以使用 dot notation 。 欲瞭解如何訪問數組內數據或內嵌文檔數據,參見 數組內數據查詢 以及 內嵌文檔數據查詢 。 
2. 規範化數據模型 
規範化數據模型指的是通過使用 引用 來表達對象之間的關係。 
這裏寫圖片描述 
一般來說,在下述情況下可以使用規範化模型: 
- 當內嵌數據會導致很多數據的重複,並且讀性能的優勢又不足於蓋過數據重複的弊端時候。 
- 需要表達比較複雜的多對多關係的時候。 
- 大型多層次結構數據集。 
引用比內嵌要更加靈活一些。 但客戶端應用必須使用二次查詢來解析文檔內包含的引用。換句話說,對同樣的操作來說,規範化模式會導致更多的網絡請求發送到數據庫服務器端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章