mongodb資料庫設計原則

來源:互聯網
上載者:User

標籤:

1.一對很少  one-to-few  可以採用內嵌文檔 

person集合中

{

name:‘張三‘,

age:20,

address:[

{country:"中國",province:"山西省",city:"長治市"},

{country:"中國",province:"山西省",city:"太原市"}

]

}

    優點:不需要單獨執行一條語句去擷取內嵌的內容

    缺點:法把這些內嵌文檔當做單獨的實體去訪問

    適用場合:一對很少且不需要單獨訪問內嵌內容

2.一對許多(但並不是很多) one-to-many  中間引用

person集合

{

_id:ObjectID(12個位元組組成)

name:"張三"

age:23

}

人員組集合

{

name:"一組",

persons:[

ObjectID("aaaaa"),

ObjectID("AAABBB")

.....

]

}

適用場合:一對多且多的一端內容因為各種理由需要單獨存在的情況下可以通過數組的方式引用多的一方的。

3.一對非常多 one-to-squillions  父級引用(mongodb每個文檔的最大16M)

company集合

{

_id:ObjectID("company01")

name:"可為時代"

}

員工集合

{

name:"張三",

age:23,

company:ObjectID("company01")

}

適用場合:一對非常多的情況下,請將一的那端引用嵌入進多的一端對象中。

4.雙向關聯  在one端和many端同時儲存對方的引用

person集合

{

_id:ObjectID("person01"),

name:"張三",

age:23,

group:ObjectID("group01")

}

group集合

{

_id:ObjectID("group01"),

name:"研發一組",

persons:[

ObjectID("person01")

ObjectID("person02")

]

}

優點:具有一對多的所有優點,同時在多的一方,可以很快找到少的一方

缺點:更新時需要同時更新兩個集合中的引用,不能使用原子性

5.反範式

反範式Many-<one :冗餘mony端的資料到one端即在one的一方儲存mony的引用集合

反範式noe -<many :冗餘one端的資料到many端即在many的一方儲存one的引用

使用場合:讀比較高,更新比較少的情況(沒有原子性)

 

7.總的設計原則

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

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

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

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

 

mongodb資料庫設計原則

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.