MongoDB數據庫設計要點

MongoDB數據庫設計原則

  • 首先考慮集合的規模

    • 一對很少

      比如個人需要保存多個地址,個人關注的話題等。這種情況下使用內嵌文檔就很合適

    • 一對很多

      注意很多的定義: 數百到數千之間。這種情況先使用間接引用比較合適,即通過一個數組保存很多一端的文檔id

    • 一對非常多

      通過父級引用來解決,即非常多的那端保存端的id

    • 總結

        1. 確定集合是否爲一對多,考慮的一端是否需要一個單獨的實體
        1. 確定一對多的程度是 一對很少,一對很多還是一對非常多
        • 一對很少且不需要單獨訪問內嵌內容的情況下使用內嵌的方式
        • 一對很多很多的那一端需要一個單獨的實體來描述時,使用數組的方式進行間接引用
        • 一對非常多,使用父級引用
  • 雙向關聯

    可以讓端和端同時保存對方的引用,但是如果對應關係發生了變化,那麼端和端就需要同時更新,這回更耗寫資源,也就無法保證操作的原子性。

  • 反範式

    • 反範式 Many -< One

      many端的部分信息冗餘到one中,前提是這部分信息必須滿足讀的比例大於寫的比例。

    • 反範式 One -< Many

      冗餘one中的數據到many中,同樣也應該考慮many端關於該數據的讀寫比例。

    • 總結

        1. 使用雙向引用的前提是需求可以接受無法原子更新的代價,這個代價就是比較耗時的寫操作。
        1. 採用冗餘數據的反範式設計時,需要考慮冗餘數據的讀寫比例,讀寫比高的數據才應該採取反範式話的設計。
  • 總結

    • 1、優先考慮內嵌,除非有什麼迫不得已的原因。

    • 2、需要單獨訪問一個對象,那這個對象就不適合被內嵌到其他對象中。

    • 3、數組不應該無限制增長。如果many端有數百個文檔對象就不要去內嵌他們可以採用引用ObjectID的方案;如果有數千個文檔對象,那麼就不要內嵌ObjectID的數組。該採取哪些方案取決於數組的大小。

    • 4、在進行反範式設計時請先確認讀寫比。一個幾乎不更改只是讀取的字段才適合冗餘到其他對象中。

    • 5、在mongodb中如何對你的數據建模,取決於你的應用程序如何去訪問它們。數據的結構要去適應你的程序的讀寫場景。

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