版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
mongoDB的概述與存儲結(jié)構(gòu)匯報人:※※※2023/2/4101第一章mongoDB概述02第二章存儲體系結(jié)構(gòu)背后的故事硬實力軟實力Contents目錄崛起的法寶2023/2/42背后的故事1崛起的法寶2第一章mongoDB概述2023/2/43背后的故事——Web2.0來襲1.互聯(lián)網(wǎng)應(yīng)用用戶量劇增2.數(shù)據(jù)量呈幾何級數(shù)增長3.高并發(fā)的讀寫2023/2/44背后的故事——RDBMS的困境1.數(shù)據(jù)庫并發(fā)負(fù)載高2.海量數(shù)據(jù)存儲和訪問3.數(shù)據(jù)庫數(shù)據(jù)越來越大4.事務(wù)管理的負(fù)擔(dān)5.對關(guān)系型數(shù)據(jù)庫讀/寫實時性的忽略6.多表關(guān)聯(lián)查詢被弱化2023/2/45背后的故事——NoSQL的崛起NoSQL全稱是NotOnlySql,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL數(shù)據(jù)庫主要應(yīng)用于web2.0的大規(guī)模系統(tǒng),具有模式靈活、最終一致性、面向海量數(shù)據(jù)、分布式、開源、水平可擴展、配置簡單、非關(guān)系型等特點。存儲類型NoSQL產(chǎn)品特性列式存儲Hbase、CassandraHypertable按列存儲數(shù)據(jù),最大的特點是方便存儲結(jié)構(gòu)和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,針對某一列或者某幾列的查詢有非常大的I/O優(yōu)勢鍵值存儲Redis、TokyoCabinetTokyoTyrant、Flare可以通過鍵快速查詢到值。一般來說,存儲不管值的格式,照單全收文檔式存儲MongoDB、CouchDB文檔存儲一般用類似JSON格式存儲,存儲的內(nèi)容是文檔類型的,這樣也就有機會對某些字段建立索引,實現(xiàn)關(guān)系型數(shù)據(jù)庫的某些功能對象式存儲db4oVersant通過類似面向?qū)ο笳Z言的語法操作數(shù)據(jù)庫,通過對象的方式存取數(shù)據(jù)2023/2/46背后的故事——mongoDB的前世今生2007年10月,MongoDB由10gen團隊所發(fā)展,2009年2月首度推出MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品MongoDB是由C++語言編寫的開源數(shù)據(jù)庫系統(tǒng)MongoDB服務(wù)端可運行在Linux、Windows或OS
X平臺,支持32位和64位應(yīng)用2023/2/47崛起的法寶——vsRDBMS2023/2/48崛起的法寶——數(shù)據(jù)模型MongoDB數(shù)據(jù)庫是一個面向集合且模式自由的文檔類型數(shù)據(jù)庫。1.面向集合面向集合是指數(shù)據(jù)被分組存在在數(shù)據(jù)集中,被稱為一個集合(Collencton==table)。集合類似于關(guān)系型數(shù)據(jù)庫的表(table),不同于表的是,集合不需要定義任何模式,集合在存儲文檔,一個文檔類似于關(guān)系型數(shù)據(jù)庫的一條記錄。在MongoDB中,要操作一個表并不需要創(chuàng)建它,可以直接往集合中插入數(shù)據(jù),如果集合不存在,它會自動創(chuàng)建這個集合。2.模式自由模式自由就是對存儲在MongoDB數(shù)據(jù)庫中的數(shù)據(jù),我們不需要知道它是什么結(jié)構(gòu)(可以是任何的文檔)。3.文檔型文檔型存儲的數(shù)據(jù)是鍵值對的集合,鍵是字符串,值可以是數(shù)據(jù)類型集合中的任意類型,包括數(shù)組和文檔。我們把這個數(shù)據(jù)格式稱為BSON(BinarySerializedDocumentNotation)2023/2/49崛起的法寶——功能性1.完整的索引支持:可以對文檔創(chuàng)建索引,甚至還可以對內(nèi)嵌文檔以及數(shù)組創(chuàng)建索引。MongoDB的查詢優(yōu)化器會自動分析查詢語句,然后生成一個高效的查詢集合。2.動態(tài)查詢:MongoDB的查詢指令使用JSON形式,使查詢表達(dá)式變得非常豐富,還可以非常容易地查詢文檔中的內(nèi)嵌對象和數(shù)組。3.查詢監(jiān)視:MongoDB提供了很多性能監(jiān)視工具,用于分析數(shù)據(jù)庫操作的性能。
2023/2/410崛起的法寶——功能性(續(xù))4.復(fù)制及自動故障轉(zhuǎn)移:MongoDB數(shù)據(jù)庫支持服務(wù)器之間的復(fù)制,從節(jié)點可以復(fù)制主節(jié)點的數(shù)據(jù),主節(jié)點的所有對數(shù)據(jù)的操作都會同步到從節(jié)點。從節(jié)點的數(shù)據(jù)跟主節(jié)點的數(shù)據(jù)是完全一樣的,以作備份。主節(jié)點發(fā)生故障之后,從節(jié)點可以升級為主節(jié)點,也可以通過從節(jié)點對故障主節(jié)點進(jìn)行數(shù)據(jù)恢復(fù)。5.高效地傳統(tǒng)存儲方式:支持二進(jìn)制數(shù)據(jù)及大型對象(如視頻),可以將圖片文件甚至視頻轉(zhuǎn)換成二進(jìn)制的數(shù)據(jù)存儲到數(shù)據(jù)庫中。6.自動分片以支持云級別的伸縮性:可以水平擴展數(shù)據(jù)庫集群,動態(tài)添加片(服務(wù)器)。2023/2/411崛起的法寶——其他招式1.拓展功能強大2.便于管理3.適用于多種場合2023/2/412硬實力1軟實力2第二章存儲結(jié)構(gòu)2023/2/413HDDSSD隨機訪問(IOPS)12512000
(100x)順序讀寫(Throughput)~100MB/s~200MB/s(2x)VS.硬實力——磁盤數(shù)據(jù)的存儲總離不開磁盤,因此mongodb的數(shù)據(jù)存儲設(shè)備當(dāng)然也只能是磁盤。官方建議采用SSD固態(tài)硬盤。mongodData
file
SSD
Journal
HDDLog
HDD優(yōu)化的IO部署方案數(shù)據(jù)IO:隨機訪問為主{
x:
12
}DiskLoc:
xxRead:
DiscLoc:
xxDisckLoc:
xx123無冗余寫性能一般寫入速度慢條帶化+鏡像性能好+數(shù)據(jù)冗余建議的RAIDLevel硬實力——存儲引擎存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分。它的主要職責(zé)就是負(fù)責(zé)把數(shù)據(jù)存儲到硬盤和把數(shù)據(jù)從硬盤檢索出來。MySQL和Riak均支持多個不同的存儲引擎。不同的存儲引擎對不同的應(yīng)用需求有特別的優(yōu)化。如某個存儲引擎可以是專為高并發(fā)寫設(shè)計的,而另一個則是為高壓縮率設(shè)計從而達(dá)到節(jié)省磁盤空間的目標(biāo)。mongoDB默認(rèn)采用的存儲引擎是操作系統(tǒng)底層提供的內(nèi)存映射文件(MMAP)(至今也只有一種)。2023/2/418硬實力——內(nèi)存映射物理內(nèi)存010000硬盤480200480虛擬內(nèi)存100000200
mmap()Pagefault,10ms頁面不在內(nèi)存,缺頁中斷
10ms頁面已在內(nèi)存,50us1234硬實力——故障恢復(fù)復(fù)制集一個典型的集群結(jié)構(gòu)如下:Shards
每一個shard包括一個或多個服務(wù)和存儲數(shù)據(jù)的mongod進(jìn)程(mongod是MongoDB數(shù)據(jù)的核心進(jìn)程),典型的每個shard開啟多個服務(wù)來提高服務(wù)的可用性。這些服務(wù)/mongod進(jìn)程在shard中組成一個復(fù)制集。硬實力——負(fù)載均衡2023/2/421軟實力——數(shù)據(jù)類型null
布爾
ture|false整數(shù)
123浮點
12.3字符串
“helloworld”對象ID
用newObjectId()來申明。日期用newDate()來申明時間戳數(shù)組
[“apple”,”blanan”,”pear”]內(nèi)嵌文檔{“username”:“jone”,“age”:13,“contact”:{“home”:”123”,”moblie”:”456”}}RegExp
正則表達(dá)式/[a-z]/2023/2/422數(shù)字型表示MongoDB對整型數(shù)字的存儲分兩個級別,一個32位的,一是64位的。浮點數(shù)MongoDB僅支持64位的雙精度浮點數(shù)。整數(shù)表示法:64位浮點數(shù)表示法:0000000000000000000000000000000000000000000000000000000000000001mongo內(nèi)部,所有數(shù)字都是用long存儲,所以單個數(shù)字是8字節(jié)2023/2/423字符型表示MongoDB的所有字符均采用UTF-8編碼。UTF-8(8-bitUnicodeTransformationFormat)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由KenThompson于1992年創(chuàng)建?,F(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC3629。UTF-8用1到6個字節(jié)編碼UNICODE字符。2023/2/424日期表示日期類型存儲是從標(biāo)準(zhǔn)紀(jì)元開始的毫秒數(shù),不存儲時區(qū)。JavaScript中,Date對象用作MongoDB的日期類型,由于JavaScript本身的特性,創(chuàng)建一個Date對象時,通常會調(diào)用newDate(…)而不是使用Date(…)。因為調(diào)用Date(…)實際返回的是對日期的字符串表示,而不是真正的Date對象。格式:{“date”:newDate()}
2023/2/425ObjectID詳解不同的機器都能用全局唯一的同種方法方便的生成它。ObjectId使用12字節(jié)的存儲空間,其生成方式如下:4e931cb6edcd881e1900017f時間戳機器IDPID計數(shù)器時間戳保證秒級唯一,機器ID保證設(shè)計時考慮分布式,避免時鐘同步,PID保證同一臺服務(wù)器運行多個mongod實例時的唯一性,最后的計數(shù)器保證同一秒內(nèi)的唯一性。2023/2/426字符串表示由于字符采用的UTF-8編碼,目的就是為了實現(xiàn)字符串的可變格式和可變長度。\0標(biāo)識字符
串長度字符串內(nèi)容參考:/html/3586.htmlLEN=n+5=長度(4字節(jié))+字符串(n字節(jié))+(1字節(jié))2023/2/427BSON格式存儲例:{a:'12'}BSON結(jié)構(gòu)如下:Len|vtype|key|0|v|E
長度|value類型|key|0|value|結(jié)束符號
4|1|1|1|2|1=10字節(jié)2023/2/428軟實力——文件在MongoDB內(nèi)部,每個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變得越來越多。所以如果系統(tǒng)中有一個叫做test的數(shù)庫,那么構(gòu)成test這個數(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位。2023/2/429命名空間在數(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有3個數(shù)據(jù)文件,其中第
3個是預(yù)分配的空文件。前兩個數(shù)據(jù)文件被分成幾個數(shù)據(jù)域,屬于幾個不同的命名空間。2023/2/430軟實力——存儲過程2023/2/431下圖展示了數(shù)據(jù)庫是如何跟底層系統(tǒng)打交道的虛擬地址空間2023/2/432內(nèi)部文件格式在名字空間文件中,保存了每個名字空間的存儲信息元數(shù)據(jù),包括其大小,塊數(shù),第一塊位置,最后一塊位置,被刪除的塊的鏈表以及索引信息2023/2/433塊結(jié)構(gòu)各個Extent(塊)采用雙鏈表的形式連接2023/2/434塊和記錄各個文檔數(shù)據(jù)也是采用雙鏈表的形式連接2023/2/435塊相關(guān)特性1.每一條記錄在塊內(nèi)從4的倍數(shù)的字節(jié)處開始2.塊的大小不會動態(tài)擴增3.盡量數(shù)據(jù)不跨塊,但若記錄的大小大于一個塊的大小,必然會跨塊4.相似記錄計量保持在同一個塊中2023/2/436軟實力——選擇查詢MySQL:
SELECT*FROMuserMongo:
db.user.find()MySQL:
SELECT*FROMuserWHEREname='foobar'Mongo:
db.user.find({'name':'foobar'})2023/2/437MySQL:
INSERTINTOuser(`name`,`age`)values('foobar',25)Mongo:
db.user.insert({'name':'foobar','age':25})ifyouwantaddacolumn`email`onMySQL,youmust:
ALTERTABLEuser….ButinMongo,youcanjust:
db.user.insert({'name':'foobar','age':25,'email':'foo@'})軟實力——插入2023/2/438
MongoDB在執(zhí)行插入時,首先,會將插入的數(shù)據(jù)轉(zhuǎn)換成BSON格式;然后,MongoDB數(shù)據(jù)庫會對BSON進(jìn)行解析,并且檢查是否存在“_id”鍵(_id鍵在插入數(shù)據(jù)庫時MongoDB會自動生成)。MongoDB還對文檔的大小做了限制。1.8之前的版本,文檔不能超過4MB;1.8之后的版本支持16MB。除了這些之外,沒有別的數(shù)據(jù)校驗,就是簡單的將文檔原樣存入數(shù)據(jù)庫中。這樣做的壞處是允許插入無限數(shù)據(jù);好處就是不會受到注入式攻
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版大型設(shè)備搬運工程車租賃協(xié)議3篇
- 2024版婚宴花卉租賃合同
- 2024版冷水機組安裝合同
- 2024年餐具批量采購供應(yīng)協(xié)議一
- 2022年中考化學(xué)模擬卷1(廣東專用)
- 2024年高效能源渣石買賣協(xié)議3篇
- 2024版智能化產(chǎn)品OEM合作采購協(xié)議樣本版B版
- 2024年環(huán)保項目投資借款轉(zhuǎn)換正式協(xié)議3篇
- 2024影視制作公司與演員藝人演藝經(jīng)紀(jì)合同
- 勞務(wù)派遣的保險責(zé)任協(xié)議書
- GB/T 44481-2024建筑消防設(shè)施檢測技術(shù)規(guī)范
- 班主任月考成績質(zhì)量分析總結(jié)與反思
- 小學(xué)五年級家長會-主題班會
- DB11T 211-2017 園林綠化用植物材料 木本苗
- 【3套試卷】人教版八年級數(shù)學(xué)上冊期末考試試題【答案】
- 單詞連連看答題闖關(guān)游戲課堂互動課件1
- 中山市2023-2024八年級上學(xué)期期末考試數(shù)學(xué)試卷
- 2024年廣州市南沙區(qū)初中語文畢業(yè)班模擬考試卷(附答案解析)
- 物業(yè)服務(wù)考核辦法及評分細(xì)則(表格模板)
- 2024年春九年級化學(xué)下冊 第九單元 溶液教案 (新版)新人教版
- DL-T 1071-2023 電力大件運輸規(guī)范
評論
0/150
提交評論