|
按照官方的說(shuō)法,MongoDB是一種可擴(kuò)展的高性能的開(kāi)源的面向文檔(document-oriented )的數(shù)據(jù)庫(kù),采用C++開(kāi)發(fā)。注意mongo不是mango(芒果),這個(gè)詞是從humongous中截取出來(lái)的,其野心不言而明,直指海量數(shù)據(jù)存儲(chǔ)。和其他很多NoSQL不太一樣,MongoDB背后有一個(gè)專(zhuān)門(mén)的商業(yè)公司在提供支持和推廣,有點(diǎn)類(lèi)似MySQL AB的模式。這一系列文章,是為入門(mén)者寫(xiě)的,已經(jīng)對(duì)NoSQL和MongoDB有一定研究和經(jīng)驗(yàn)的,可以略過(guò),或者看看如有疏漏,請(qǐng)留言指出。
面向文檔,那么什么是文檔呢?很明顯這不是我們常見(jiàn)的word文檔。這里說(shuō)的文檔,是一種可以嵌套的數(shù)據(jù)集合。從關(guān)系數(shù)據(jù)庫(kù)的范式的概念來(lái)說(shuō),嵌套是明顯的反范式設(shè)計(jì)。范式設(shè)計(jì)的好處是消除了依賴(lài),但是增加了關(guān)聯(lián),查詢(xún)需要通過(guò)關(guān)聯(lián)兩張或者多張表來(lái)獲得所需要的全部數(shù)據(jù),但是更改操作是原子的,只需要修改一個(gè)地方即可。反范式則是增加了數(shù)據(jù)冗余來(lái)提升查詢(xún)性能,但更新操作可能需要更新冗余的多處數(shù)據(jù),需要注意一致性的問(wèn)題。
一個(gè)典型的例子,如blog,關(guān)系數(shù)據(jù)庫(kù)中一般可以把文章設(shè)計(jì)為一張表,評(píng)論設(shè)計(jì)為一張表,那么在頁(yè)面需要展示一篇文章和其對(duì)應(yīng)的評(píng)論的時(shí)候,就需要關(guān)聯(lián)查詢(xún)文章表和評(píng)論表。但是面向文檔的設(shè)計(jì),可以將評(píng)論作為文章的一個(gè)嵌套文檔存放在一起,這不但省去了關(guān)聯(lián)查詢(xún),由于存儲(chǔ)在一起,查詢(xún)的性能也可以做到更好。
MongoDB的面向文檔采用的是BSON,一種類(lèi)似JSON的格式,但是是二進(jìn)制序列化的。如上面提到的blog的文章和評(píng)論,可以做如下設(shè)計(jì):
{ 'id':1, 'author':'NinGoo', 'title':'白話MongoDB(一)', 'content':'按照官方的說(shuō)法,此處省略一萬(wàn)字',
comment:[ { 'comment-author':'宋兵甲', 'comment-content':'有木有' } ,
{ 'comment-author':'尼瑪','comment-content':'傷不起啊' }
]
}
it知識(shí)庫(kù):白話MongoDB(一),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。