什么是MongoDB? 為什么要使用類似mongodb的nosql數(shù)據(jù)庫?
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫開源項目。由C++語言編寫,旨在為WEB應(yīng)用提供可護展的高性能數(shù)據(jù)存儲解決方案。它的特點是可擴展,高性能,易使用,模式自由,存儲數(shù)據(jù)非常方便等。 它與我們平常所使用的那種關(guān)系型數(shù)據(jù)庫有很大的不同,MongoDB是基于文檔(Documents)存儲的,Document相當(dāng)于關(guān)系型數(shù)據(jù)中的每一行的條目,而MongoDB的每個集合(Collection)相當(dāng)于關(guān)系型數(shù)據(jù)庫中的表。MongoDB中Collection之間沒有關(guān)系型數(shù)據(jù)庫那種很強的關(guān)聯(lián),所以MongoDB存儲相對獨立,并且它是一種數(shù)據(jù)冗余的存儲方式,用以加快數(shù)據(jù)的查詢。
Mongo數(shù)據(jù)主要特性有:
1 面向文檔存儲:(類JSON數(shù)據(jù)模式簡單而強大)。
2 高效的傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象(如照片和視頻)。
3 復(fù)制及自動故障轉(zhuǎn)移:Mongo數(shù)據(jù)庫支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。
4 Auto-Sharding自動分片支持云級擴展性(處于早期alpha階段):自動分片功能支持水平的數(shù)據(jù)庫集群,可動態(tài)添加額外的機器。
5 動態(tài)查詢:它支持豐富的查詢表達式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。
6 全索引支持:包括文檔內(nèi)嵌對象及數(shù)組。Mongo的查詢優(yōu)化器會分析查詢表達式,并生成一個高效的查詢計劃。
7 支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
適用場景:
1 適合實時的插入,更新與查詢,并具備應(yīng)用程序?qū)崟r數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。
2 適合作為信息基礎(chǔ)設(shè)施的持久化緩存層。
3 適合由數(shù)十或數(shù)百臺服務(wù)器組成的數(shù)據(jù)庫。因為Mongo已經(jīng)包含對MapReduce引擎的內(nèi)置支持。
4 Mongo的BSON數(shù)據(jù)格式非常適合文檔化格式的存儲及查詢。
不適用場景:
1 高度事務(wù)性的系統(tǒng)。
2 傳統(tǒng)的商業(yè)智能應(yīng)用。
3 極為復(fù)雜的SQL查詢。
MongoDB 與 CAP理論
MongoDB的核心理論就是Document,它是由一個鍵值對集合構(gòu)成的,就像是一個HashMap,或是字典。它的存儲格式類似一個json,
{“username”: “Peter”, “age”: 10 }
MongoDB中的Collection表示一組documents。并且Collection是schema-free的,也就是說沒有嚴(yán)格的格式限制,可以隨意插入各種不同格式和類型的document。
例如一個Collection中可以包含
{“username”: “Peter”}
{“username”: “Peter”, “age”: 10 }
{“password”: 11111}
{“scorelist”: [{“math”:90 } , {“english”:100 }]} 復(fù)雜的包含數(shù)組類型的數(shù)據(jù)
MongoDB中的DataBase用于聚集Collection ,一個MongoDB實例可以host多個Database,而每個database可以認(rèn)為是完全獨立的,類似于SqlServer數(shù)據(jù)庫可以通過host多個數(shù)據(jù)庫一樣。
關(guān)于MongoDB的其他內(nèi)容,都可以在一本叫做《MongoDB權(quán)威指南》的書中找到。而且Mongo的官網(wǎng),就提供了MongoDB的快速入門 等資料,通俗易懂,很容易學(xué)習(xí)。
關(guān)于Nosql的個人理解:
Nosql并不是No sql ,而應(yīng)該更合理地解釋為not only sql 或是非關(guān)系型數(shù)據(jù)庫。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,強化了關(guān)系的概念。隨著目前互聯(lián)網(wǎng)應(yīng)用規(guī)模的迅速膨脹,傳統(tǒng)的存儲模型出現(xiàn)了很多性能瓶頸,很多跨表、跨庫、跨物理機器的查詢導(dǎo)致數(shù)據(jù)查詢的效率降低。 而nosql數(shù)據(jù)庫,則淡化了關(guān)系的概念,通過可能造成數(shù)據(jù)冗余的代價使得數(shù)據(jù)存儲相對獨立,無需交叉查詢 ,這也使得Nosql數(shù)據(jù)庫具有了很好的擴展性,因為數(shù)據(jù)存儲相對獨立,擴展著實十分方便。并且Nosql數(shù)據(jù)庫普遍具有非常高的讀寫能力,尤其是大數(shù)據(jù)量下,這都得益于無關(guān)系性和數(shù)據(jù)庫存儲結(jié)構(gòu)簡單的特性。但是不存在nosql和傳統(tǒng)關(guān)系型數(shù)據(jù)庫誰好誰差的概念,它們各自存在優(yōu)缺點,不同場景進行不同的應(yīng)用,讓關(guān)系數(shù)據(jù)庫關(guān)注在關(guān)系上,nosql關(guān)注在存儲上。
聯(lián)系客服