




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、mongoDB的概述與存儲結(jié)構(gòu)匯報人:匯報人:2022-4-161第一章第一章 mongoDB概述概述第二章第二章 存儲體系結(jié)構(gòu)存儲體系結(jié)構(gòu)背后的故事背后的故事硬實力硬實力軟實力軟實力Contents目目錄錄崛起的法寶崛起的法寶2022-4-162背后的故事1崛起的法寶2第一章 mongoDB概述2022-4-163背后的故事Web2.0來襲1.互聯(lián)網(wǎng)應(yīng)用用戶量劇增互聯(lián)網(wǎng)應(yīng)用用戶量劇增2.數(shù)據(jù)量呈幾何級數(shù)增長數(shù)據(jù)量呈幾何級數(shù)增長3.高并發(fā)的讀寫高并發(fā)的讀寫2022-4-164背后的故事RDBMS的困境1.數(shù)據(jù)庫并發(fā)負載高數(shù)據(jù)庫并發(fā)負載高2.海量數(shù)據(jù)存儲和訪問海量數(shù)據(jù)存儲和訪問3.數(shù)據(jù)庫數(shù)據(jù)越來
2、越大數(shù)據(jù)庫數(shù)據(jù)越來越大4.事務(wù)管理的負擔(dān)事務(wù)管理的負擔(dān)5.對關(guān)系型數(shù)據(jù)庫讀對關(guān)系型數(shù)據(jù)庫讀/寫實時性的忽略寫實時性的忽略6.多表關(guān)聯(lián)查詢被弱化多表關(guān)聯(lián)查詢被弱化 2022-4-165背后的故事NoSQL的崛起NoSQL全稱是全稱是Not Only Sql,指的是非關(guān)系型的數(shù)據(jù)庫。,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL數(shù)據(jù)庫主要數(shù)據(jù)庫主要應(yīng)用于應(yīng)用于web2.0的大規(guī)模系統(tǒng),具有模式靈活、最終一致性、面向海量數(shù)據(jù)、的大規(guī)模系統(tǒng),具有模式靈活、最終一致性、面向海量數(shù)據(jù)、分布式、開源、水平可擴展、配置簡單、非關(guān)系型等特點。分布式、開源、水平可擴展、配置簡單、非關(guān)系型等特點。存儲類型存儲類型NoSQL產(chǎn)
3、品產(chǎn)品特性特性列式存儲Hbase、CassandraHypertable按列存儲數(shù)據(jù),最大的特點是方便存儲結(jié)構(gòu)和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,針對某一列或者某幾列的查詢有非常大的 I/O 優(yōu)勢鍵值存儲Redis、TokyoCabinetTokyo Tyrant、Flare可以通過鍵快速查詢到值。一般來說,存儲不管值的格式,照單全收文檔式存儲MongoDB、CouchDB文 檔 存 儲 一 般 用 類 似JSON 格式存儲,存儲的內(nèi)容是文檔類型的,這樣也就有機會對某些字段建立索引,實現(xiàn)關(guān)系型數(shù)據(jù)庫的某些功能對象式存儲db4oVersant通過類似面向?qū)ο笳Z言的語法操作數(shù)據(jù)庫,通過對象的方式存取數(shù)
4、據(jù)2022-4-166背后的故事mongoDB的前世今生 2007年年10月,月,MongoDB由由10gen團隊所發(fā)展,團隊所發(fā)展,2009年年2月月首度推出首度推出 MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品產(chǎn)品 MongoDB 是由是由C+語言編寫的開源數(shù)據(jù)庫系統(tǒng)語言編寫的開源數(shù)據(jù)庫系統(tǒng) MongoDB服務(wù)端可運行在服務(wù)端可運行在Linux、Windows或或OS X平臺,平臺,支持支持32位和位和64位應(yīng)用位應(yīng)用2022-4-167崛起的法寶vs RDBMS2022-4-168崛起的法寶數(shù)據(jù)模型MongoDB 數(shù)據(jù)庫是一個面向集合
5、且模式自由的文檔類型數(shù)據(jù)庫。數(shù)據(jù)庫是一個面向集合且模式自由的文檔類型數(shù)據(jù)庫。1. 面向集合面向集合面面 向向 集集 合合 是是 指指 數(shù)數(shù) 據(jù)據(jù) 被被 分分 組組 存存 在在 在在 數(shù)數(shù) 據(jù)據(jù) 集集 中中 , 被被 稱稱 為為 一一 個個 集集 合合(Collencton=table)。集合類似于關(guān)系型數(shù)據(jù)庫的表()。集合類似于關(guān)系型數(shù)據(jù)庫的表(table) ,不同于表的不同于表的是,集合不需要定義任何模式,集合在存儲文檔,一個文檔類似于關(guān)系型數(shù)是,集合不需要定義任何模式,集合在存儲文檔,一個文檔類似于關(guān)系型數(shù)據(jù)庫的一條記錄。在據(jù)庫的一條記錄。在 MongoDB 中,要操作一個表并不需要創(chuàng)建它
6、,可以直接中,要操作一個表并不需要創(chuàng)建它,可以直接往集合中插入數(shù)據(jù),如果集合不存在,它會自動創(chuàng)建這個集合。往集合中插入數(shù)據(jù),如果集合不存在,它會自動創(chuàng)建這個集合。2. 模式自由模式自由模式自由就是對存儲在模式自由就是對存儲在 MongoDB 數(shù)據(jù)庫中的數(shù)據(jù),我們不需要知道它是什么數(shù)據(jù)庫中的數(shù)據(jù),我們不需要知道它是什么結(jié)構(gòu)(可以是任何的文檔)。結(jié)構(gòu)(可以是任何的文檔)。3. 文檔型文檔型文檔型存儲的數(shù)據(jù)是鍵值對的集合,鍵是字符串,值可以是數(shù)據(jù)類型集合中文檔型存儲的數(shù)據(jù)是鍵值對的集合,鍵是字符串,值可以是數(shù)據(jù)類型集合中的任意類型,包括數(shù)組和文檔。我們把這個數(shù)據(jù)格式稱為的任意類型,包括數(shù)組和文檔。我
7、們把這個數(shù)據(jù)格式稱為 BSON (Binary Serialized Document Notation)2022-4-169崛起的法寶功能性1.完整的索引支持:可以對文檔創(chuàng)建索引,甚至還可以對內(nèi)嵌文檔以及數(shù)組完整的索引支持:可以對文檔創(chuàng)建索引,甚至還可以對內(nèi)嵌文檔以及數(shù)組創(chuàng)建索引。創(chuàng)建索引。MongoDB 的查詢優(yōu)化器會自動分析查詢語句,然后生成一個高的查詢優(yōu)化器會自動分析查詢語句,然后生成一個高效的查詢集合。效的查詢集合。2.動態(tài)查詢:動態(tài)查詢: MongoDB 的查詢指令使用的查詢指令使用 JSON 形式,使查詢表達式變得非常形式,使查詢表達式變得非常豐富,還可以非常容易地查詢文檔中的內(nèi)
8、嵌對象和數(shù)組。豐富,還可以非常容易地查詢文檔中的內(nèi)嵌對象和數(shù)組。3.查詢監(jiān)視:查詢監(jiān)視: MongoDB 提供了很多性能監(jiān)視工具,用于分析數(shù)據(jù)庫操作的提供了很多性能監(jiān)視工具,用于分析數(shù)據(jù)庫操作的性能。性能。 2022-4-1610崛起的法寶功能性(續(xù))4.復(fù)制及自動故障轉(zhuǎn)移:復(fù)制及自動故障轉(zhuǎn)移:MongoDB 數(shù)據(jù)庫支持服務(wù)器之間的復(fù)制,從節(jié)點可以復(fù)數(shù)據(jù)庫支持服務(wù)器之間的復(fù)制,從節(jié)點可以復(fù)制主節(jié)點的數(shù)據(jù),主節(jié)點的所有對數(shù)據(jù)的操作都會同步到從節(jié)點。從節(jié)點的數(shù)據(jù)制主節(jié)點的數(shù)據(jù),主節(jié)點的所有對數(shù)據(jù)的操作都會同步到從節(jié)點。從節(jié)點的數(shù)據(jù)跟主節(jié)點的數(shù)據(jù)是完全一樣的,以作備份。主節(jié)點發(fā)生故障之后,從節(jié)點可以
9、升跟主節(jié)點的數(shù)據(jù)是完全一樣的,以作備份。主節(jié)點發(fā)生故障之后,從節(jié)點可以升級為主節(jié)點,也可以通過從節(jié)點對故障主節(jié)點進行數(shù)據(jù)恢復(fù)。級為主節(jié)點,也可以通過從節(jié)點對故障主節(jié)點進行數(shù)據(jù)恢復(fù)。5.高效地傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象(如視頻),可以高效地傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象(如視頻),可以將圖片文件甚至視頻轉(zhuǎn)換成二進制的數(shù)據(jù)存儲到數(shù)據(jù)庫中。將圖片文件甚至視頻轉(zhuǎn)換成二進制的數(shù)據(jù)存儲到數(shù)據(jù)庫中。6.自動分片以支持云級別的伸縮性:自動分片以支持云級別的伸縮性: 可以水平擴展數(shù)據(jù)庫集群,動態(tài)添可以水平擴展數(shù)據(jù)庫集群,動態(tài)添加片(服務(wù)器)。加片(服務(wù)器)。2022-4-1611崛起的法寶其
10、他招式1.拓展功能強大2.便于管理3.適用于多種場合2022-4-1612硬實力1軟實力2第二章 存儲結(jié)構(gòu)2022-4-1613HDDSSD隨機訪問(IOPS)12512000 (100 x)順序讀寫(Throughput)100MB/s200MB/s (2x)VS.硬實力磁盤數(shù)據(jù)的存儲總離不開磁盤,因此數(shù)據(jù)的存儲總離不開磁盤,因此mongodb的數(shù)據(jù)存儲設(shè)備當(dāng)然也只能是磁的數(shù)據(jù)存儲設(shè)備當(dāng)然也只能是磁盤。官方建議采用盤。官方建議采用SSD固態(tài)硬盤。固態(tài)硬盤。mongodData fileSSD Journal HDDLog HDD優(yōu)化的IO部署方案數(shù)據(jù)IO:隨機訪問為主 x: 12 DiskL
11、oc: xxRead: DiscLoc: xxDisckLoc: xx123無冗余寫性能一般寫入速度慢條帶化+鏡像性能好 + 數(shù)據(jù)冗余建議的RAID Level硬實力存儲引擎存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分。它的主要職責(zé)就是負責(zé)存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分。它的主要職責(zé)就是負責(zé)把數(shù)據(jù)存儲到硬盤和把數(shù)據(jù)從硬盤檢索出來。把數(shù)據(jù)存儲到硬盤和把數(shù)據(jù)從硬盤檢索出來。MySQLMySQL和和RiakRiak均支持多個不均支持多個不同的存儲引擎。不同的存儲引擎對不同的應(yīng)用需求有特別的優(yōu)化。如某個同的存儲引擎。不同的存儲引擎對不同的應(yīng)用需求有特別的優(yōu)化。如某個存儲引擎可以是專為高并發(fā)寫
12、設(shè)計的,而另一個則是為高壓縮率設(shè)計從而存儲引擎可以是專為高并發(fā)寫設(shè)計的,而另一個則是為高壓縮率設(shè)計從而達到節(jié)省磁盤空間的目標。達到節(jié)省磁盤空間的目標。mongoDBmongoDB默認采用的存儲引擎是操作系統(tǒng)底層提供的內(nèi)存映射文件(默認采用的存儲引擎是操作系統(tǒng)底層提供的內(nèi)存映射文件(MMAPMMAP)(至今也只有一種)。(至今也只有一種)。2022-4-1618硬實力內(nèi)存映射物理內(nèi)存物理內(nèi)存010000硬盤硬盤480200480虛擬內(nèi)存虛擬內(nèi)存100000200 mmap()Page fault, 10ms頁面不在內(nèi)存,缺頁中斷 10ms頁面已在內(nèi)存, 50us1234硬實力故障恢復(fù)u復(fù)制集一個
13、典型的集群結(jié)構(gòu)如下:Shards每一個shard包括一個或多個服務(wù)和存儲數(shù)據(jù)的mongod進程(mongod是MongoDB數(shù)據(jù)的核心進程),典型的每個shard開啟多個服務(wù)來提高服務(wù)的可用性。這些服務(wù)/mongod進程在shard中組成一個復(fù)制集。硬實力負載均衡2022-4-1621軟實力數(shù)據(jù)類型null 布爾布爾 ture|false整數(shù)整數(shù) 123浮點浮點 12.3字符串字符串 “hello world”對象對象ID 用 new ObjectId()來申明。 日期日期 用 new Date()來申明時間戳?xí)r間戳數(shù)組數(shù)組 “apple”,”blanan”,”pear”內(nèi)嵌文檔內(nèi)嵌文檔 “u
14、sername” : “jone”, “age”: 13, “contact” : “home”:”123”,”moblie”:”456”RegExp 正則表達式 /a-z/2022-4-1622數(shù)字型表示MongoDB對整型數(shù)字的存儲分兩個級別,一個32位的,一是64位的。浮點數(shù)MongoDB僅支持64位的雙精度浮點數(shù)。整數(shù)表示法:64位浮點數(shù)表示法:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001mongo內(nèi)部內(nèi)部, 所有數(shù)字都是用所有數(shù)字都是用long存儲存儲, 所以單個數(shù)字是所
15、以單個數(shù)字是8字節(jié)字節(jié)2022-4-1623字符型表示MongoDB的所有字符均采用UTF-8編碼。UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson于1992年創(chuàng)建。現(xiàn)在已經(jīng)標準化為RFC 3629。UTF-8用1到6個字節(jié)編碼UNICODE字符。2022-4-1624日期表示日期類型存儲是從標準紀元開始的毫秒數(shù),不存儲時區(qū)。JavaScript中,Date對象用作MongoDB的日期類型,由于JavaScript本身的特性,創(chuàng)建一個Date對象時,通常會調(diào)用new Date(
16、)而不是使用Date()。因為調(diào)用Date()實際返回的是對日期的字符串表示,而不是真正的Date對象。格式:“date”:new Date() 2022-4-1625ObjectID詳解不同的機器都能用全局唯一的同種方法方便的生成它。ObjectId使用12字節(jié)的存儲空間,其生成方式如下:4e931cb6edcd881e1900017f時間戳 機器ID PID 計數(shù)器時間戳保證秒級唯一,機器ID保證設(shè)計時考慮分布式,避免時鐘同步,PID保證同一臺服務(wù)器運行多個mongod實例時的唯一性,最后的計數(shù)器保證同一秒內(nèi)的唯一性。2022-4-1626字符串表示由于字符采用的UTF-8編碼,目的就是為
17、了實現(xiàn)字符串的可變格式和可變長度。0標識字符 串長度字符串內(nèi)容參考:http:/ = 長度長度(4字節(jié)字節(jié)) + 字符串字符串(n字節(jié)字節(jié)) + (1字節(jié)字節(jié))2022-4-1627BSON格式存儲例:a:12BSON結(jié)構(gòu)如下: Len | vtype |key|0| v | E 長度 | value類型 | key |0 | value|結(jié)束符號 4| 1 | 1 |1| 2 |1 = 10字節(jié)2022-4-1628軟實力文件在MongoDB內(nèi)部,每個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變得越來越多。所以如果系統(tǒng)中有一個叫做test的數(shù)庫,那么構(gòu)成t
18、est這個數(shù)據(jù)庫的文件就會由test.ns,test.0,test.1等等組成。其中*.ns是包含命名空間的文件,保存該數(shù)據(jù)庫數(shù)據(jù)的相關(guān)信息。*.0和*.1是數(shù)據(jù)文件。32位系統(tǒng)的MongoDB服務(wù)器每一個Mongod實例只能使用2G的數(shù)據(jù)文件。這是由于地址指針只能支持32位。2022-4-1629命名空間在數(shù)據(jù)文件內(nèi)部,每個數(shù)據(jù)庫都是按照命名空間組織的,一種類別的數(shù)據(jù)與其他類別的分開存放。每個集合的文檔都有自己的命名空間,索引也是。命名空間的元數(shù)據(jù)存放在數(shù)據(jù)庫的 .ns 文件中。每個命名空間的數(shù)據(jù)都被分成若干組,放到數(shù)據(jù)文件的某一區(qū)域內(nèi),這個區(qū)域稱為數(shù)據(jù)域。在圖 中可以看到數(shù)據(jù)庫 foo 有
19、 3 個數(shù)據(jù)文件,其中第 3 個是預(yù)分配的空文件。前兩個數(shù)據(jù)文件被分成幾個數(shù)據(jù)域,屬于幾個不同的命名空間。2022-4-1630軟實力存儲過程2022-4-1631下圖展示了數(shù)據(jù)庫是如何跟底層系統(tǒng)打交道的虛擬地址空間2022-4-1632內(nèi)部文件格式在名字空間文件中,保存了每個名字空間的存儲信息元數(shù)據(jù),包括其大小,塊數(shù),第一塊位置,最后一塊位置,被刪除的塊的鏈表以及索引信息2022-4-1633塊結(jié)構(gòu)各個Extent(塊)采用雙鏈表的形式連接2022-4-1634塊和記錄各個文檔數(shù)據(jù)也是采用雙鏈表的形式連接2022-4-1635塊相關(guān)特性1.每一條記錄在塊內(nèi)從4的倍數(shù)的字節(jié)處開始2.塊的大小不
20、會動態(tài)擴增3.盡量數(shù)據(jù)不跨塊,但若記錄的大小大于一個塊的大小,必然會跨塊4.相似記錄計量保持在同一個塊中2022-4-1636軟實力選擇查詢MySQL: SELECT * FROM userMongo: db.user.find()MySQL: SELECT * FROM user WHERE name = foobarMongo: db.user.find(name : foobar)2022-4-1637MySQL: INSERT INTO user (name, age) values (foobar,25)Mongo: db.user.insert(name : foobar, age : 25)if you want add a column email on MySQL,you must : ALTER TABLE user.But in Mongo,you can just: db.user.insert(name : foobar, age : 25, email : )軟實力插入2022-4-1638 MongoDB在執(zhí)行插入時,首先,會將插入的數(shù)據(jù)轉(zhuǎn)換成BSON格式;然后,MongoDB數(shù)據(jù)庫會對BSON進行解析,并且檢查是否存在“_id”鍵(_id鍵在插入數(shù)據(jù)庫時MongoDB會自動生成)。MongoDB還對文檔的大小做了限制。1.8之前的版本,文檔不能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程合同價格確定
- 2025年不銹鋼門窗制作與安裝服務(wù)合同模板
- 2025年二手住宅買賣合同中介服務(wù)指南
- 2025年人力資源專員勞動合同終止協(xié)議
- 生產(chǎn)線智能化改造-深度研究
- 個體化診斷方法研究-深度研究
- 谷物倉儲安全監(jiān)測技術(shù)-深度研究
- 智能化臨終關(guān)懷技術(shù)應(yīng)用-深度研究
- 社交電商法律問題探討-深度研究
- 數(shù)字化在糧食流通中的應(yīng)用-深度研究
- 學(xué)科帶頭人工作計劃
- 城市更新暨老舊小區(qū)改造二期項目-初步設(shè)計說明書
- 礦石買賣協(xié)議書
- 2024年岳陽職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- 2023新蘇教版六年級下冊科學(xué)學(xué)生活動手冊答案
- 【老齡化背景下商業(yè)銀行養(yǎng)老金融發(fā)展探究文獻綜述3400字】
- 精神科護士進修
- 《用戶側(cè)電化學(xué)儲能系統(tǒng)接入配電網(wǎng)技術(shù)規(guī)定》
- 2024年洛陽市九年級語文中考第一次模擬考試卷附答案解析
- 安徽省醫(yī)療保障基金使用違法違規(guī)問題檢查指引2023版
- 脾淋巴瘤護理查房
評論
0/150
提交評論