版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
mongoDB的概述與存儲結構匯報人:※※※2023/1/11mongoDB的概述與存儲結構匯報人:※※※2022/12/01第一章mongoDB概述02第二章存儲體系結構背后的故事硬實力軟實力Contents目錄崛起的法寶2023/1/1201第一章mongoDB概述02第二章存儲體系結構背后的背后的故事1崛起的法寶2第一章mongoDB概述2023/1/13背后的故事1崛起的法寶2第一章mongoDB概述2022/背后的故事——Web2.0來襲1.互聯(lián)網應用用戶量劇增2.數(shù)據(jù)量呈幾何級數(shù)增長3.高并發(fā)的讀寫2023/1/14背后的故事——Web2.0來襲1.互聯(lián)網應用用戶量劇增202背后的故事——RDBMS的困境1.數(shù)據(jù)庫并發(fā)負載高2.海量數(shù)據(jù)存儲和訪問3.數(shù)據(jù)庫數(shù)據(jù)越來越大4.事務管理的負擔5.對關系型數(shù)據(jù)庫讀/寫實時性的忽略6.多表關聯(lián)查詢被弱化2023/1/15背后的故事——RDBMS的困境1.數(shù)據(jù)庫并發(fā)負載高2022/背后的故事——NoSQL的崛起NoSQL全稱是NotOnlySql,指的是非關系型的數(shù)據(jù)庫。NoSQL數(shù)據(jù)庫主要應用于web2.0的大規(guī)模系統(tǒng),具有模式靈活、最終一致性、面向海量數(shù)據(jù)、分布式、開源、水平可擴展、配置簡單、非關系型等特點。存儲類型NoSQL產品特性列式存儲Hbase、CassandraHypertable按列存儲數(shù)據(jù),最大的特點是方便存儲結構和半結構化數(shù)據(jù),方便做數(shù)據(jù)壓縮,針對某一列或者某幾列的查詢有非常大的I/O優(yōu)勢鍵值存儲Redis、TokyoCabinetTokyoTyrant、Flare可以通過鍵快速查詢到值。一般來說,存儲不管值的格式,照單全收文檔式存儲MongoDB、CouchDB文檔存儲一般用類似JSON格式存儲,存儲的內容是文檔類型的,這樣也就有機會對某些字段建立索引,實現(xiàn)關系型數(shù)據(jù)庫的某些功能對象式存儲db4oVersant通過類似面向對象語言的語法操作數(shù)據(jù)庫,通過對象的方式存取數(shù)據(jù)2023/1/16背后的故事——NoSQL的崛起NoSQL全稱是NotOnl背后的故事——mongoDB的前世今生2007年10月,MongoDB由10gen團隊所發(fā)展,2009年2月首度推出MongoDB是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產品MongoDB是由C++語言編寫的開源數(shù)據(jù)庫系統(tǒng)MongoDB服務端可運行在Linux、Windows或OS
X平臺,支持32位和64位應用2023/1/17背后的故事——mongoDB的前世今生2007年10月,Mo崛起的法寶——vsRDBMS2023/1/18崛起的法寶——vsRDBMS2022/12/278崛起的法寶——數(shù)據(jù)模型MongoDB數(shù)據(jù)庫是一個面向集合且模式自由的文檔類型數(shù)據(jù)庫。1.面向集合面向集合是指數(shù)據(jù)被分組存在在數(shù)據(jù)集中,被稱為一個集合(Collencton==table)。集合類似于關系型數(shù)據(jù)庫的表(table),不同于表的是,集合不需要定義任何模式,集合在存儲文檔,一個文檔類似于關系型數(shù)據(jù)庫的一條記錄。在MongoDB中,要操作一個表并不需要創(chuàng)建它,可以直接往集合中插入數(shù)據(jù),如果集合不存在,它會自動創(chuàng)建這個集合。2.模式自由模式自由就是對存儲在MongoDB數(shù)據(jù)庫中的數(shù)據(jù),我們不需要知道它是什么結構(可以是任何的文檔)。3.文檔型文檔型存儲的數(shù)據(jù)是鍵值對的集合,鍵是字符串,值可以是數(shù)據(jù)類型集合中的任意類型,包括數(shù)組和文檔。我們把這個數(shù)據(jù)格式稱為BSON(BinarySerializedDocumentNotation)2023/1/19崛起的法寶——數(shù)據(jù)模型MongoDB數(shù)據(jù)庫是一個面向集合且崛起的法寶——功能性1.完整的索引支持:可以對文檔創(chuàng)建索引,甚至還可以對內嵌文檔以及數(shù)組創(chuàng)建索引。MongoDB的查詢優(yōu)化器會自動分析查詢語句,然后生成一個高效的查詢集合。2.動態(tài)查詢:MongoDB的查詢指令使用JSON形式,使查詢表達式變得非常豐富,還可以非常容易地查詢文檔中的內嵌對象和數(shù)組。3.查詢監(jiān)視:MongoDB提供了很多性能監(jiān)視工具,用于分析數(shù)據(jù)庫操作的性能。
2023/1/110崛起的法寶——功能性1.完整的索引支持:可以對文檔創(chuàng)建索引,崛起的法寶——功能性(續(xù))4.復制及自動故障轉移:MongoDB數(shù)據(jù)庫支持服務器之間的復制,從節(jié)點可以復制主節(jié)點的數(shù)據(jù),主節(jié)點的所有對數(shù)據(jù)的操作都會同步到從節(jié)點。從節(jié)點的數(shù)據(jù)跟主節(jié)點的數(shù)據(jù)是完全一樣的,以作備份。主節(jié)點發(fā)生故障之后,從節(jié)點可以升級為主節(jié)點,也可以通過從節(jié)點對故障主節(jié)點進行數(shù)據(jù)恢復。5.高效地傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象(如視頻),可以將圖片文件甚至視頻轉換成二進制的數(shù)據(jù)存儲到數(shù)據(jù)庫中。6.自動分片以支持云級別的伸縮性:可以水平擴展數(shù)據(jù)庫集群,動態(tài)添加片(服務器)。2023/1/111崛起的法寶——功能性(續(xù))4.復制及自動故障轉移:Mongo崛起的法寶——其他招式1.拓展功能強大2.便于管理3.適用于多種場合2023/1/112崛起的法寶——其他招式1.拓展功能強大2022/12/271硬實力1軟實力2第二章存儲結構2023/1/113硬實力1軟實力2第二章存儲結構2022/12/2713HDDSSD隨機訪問(IOPS)12512000
(100x)順序讀寫(Throughput)~100MB/s~200MB/s(2x)VS.硬實力——磁盤數(shù)據(jù)的存儲總離不開磁盤,因此mongodb的數(shù)據(jù)存儲設備當然也只能是磁盤。官方建議采用SSD固態(tài)硬盤。HDDSSD隨機訪問(IOPS)12512000(100mongodData
file
SSD
Journal
HDDLog
HDD優(yōu)化的IO部署方案mongodDatafile
SSDJournalHD數(shù)據(jù)IO:隨機訪問為主{
x:
12
}DiskLoc:
xxRead:
DiscLoc:
xxDisckLoc:
xx123數(shù)據(jù)IO:隨機訪問為主{x:12}DiskLoc:x無冗余寫性能一般寫入速度慢條帶化+鏡像性能好+數(shù)據(jù)冗余建議的RAIDLevel無冗余寫性能一般寫入速度慢條帶化+鏡像建議的RAIDLev硬實力——存儲引擎存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分。它的主要職責就是負責把數(shù)據(jù)存儲到硬盤和把數(shù)據(jù)從硬盤檢索出來。MySQL和Riak均支持多個不同的存儲引擎。不同的存儲引擎對不同的應用需求有特別的優(yōu)化。如某個存儲引擎可以是專為高并發(fā)寫設計的,而另一個則是為高壓縮率設計從而達到節(jié)省磁盤空間的目標。mongoDB默認采用的存儲引擎是操作系統(tǒng)底層提供的內存映射文件(MMAP)(至今也只有一種)。2023/1/118硬實力——存儲引擎存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分硬實力——內存映射物理內存010000硬盤480200480虛擬內存100000200
mmap()Pagefault,10ms頁面不在內存,缺頁中斷
10ms頁面已在內存,50us1234硬實力——內存映射物理內存010000硬盤480200480硬實力——故障恢復復制集硬實力——故障恢復復制集一個典型的集群結構如下:Shards
每一個shard包括一個或多個服務和存儲數(shù)據(jù)的mongod進程(mongod是MongoDB數(shù)據(jù)的核心進程),典型的每個shard開啟多個服務來提高服務的可用性。這些服務/mongod進程在shard中組成一個復制集。硬實力——負載均衡2023/1/121一個典型的集群結構如下:Shards
每一個shard包括一軟實力——數(shù)據(jù)類型null
布爾
ture|false整數(shù)
123浮點
12.3字符串
“helloworld”對象ID
用newObjectId()來申明。日期用newDate()來申明時間戳數(shù)組
[“apple”,”blanan”,”pear”]內嵌文檔{“username”:“jone”,“age”:13,“contact”:{“home”:”123”,”moblie”:”456”}}RegExp
正則表達式/[a-z]/2023/1/122軟實力——數(shù)據(jù)類型null2022/12/2722數(shù)字型表示MongoDB對整型數(shù)字的存儲分兩個級別,一個32位的,一是64位的。浮點數(shù)MongoDB僅支持64位的雙精度浮點數(shù)。整數(shù)表示法:64位浮點數(shù)表示法:0000000000000000000000000000000000000000000000000000000000000001mongo內部,所有數(shù)字都是用long存儲,所以單個數(shù)字是8字節(jié)2023/1/123數(shù)字型表示MongoDB對整型數(shù)字的存儲分兩個級別,一個32字符型表示MongoDB的所有字符均采用UTF-8編碼。UTF-8(8-bitUnicodeTransformationFormat)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由KenThompson于1992年創(chuàng)建?,F(xiàn)在已經標準化為RFC3629。UTF-8用1到6個字節(jié)編碼UNICODE字符。2023/1/124字符型表示MongoDB的所有字符均采用UTF-8編碼。UT日期表示日期類型存儲是從標準紀元開始的毫秒數(shù),不存儲時區(qū)。JavaScript中,Date對象用作MongoDB的日期類型,由于JavaScript本身的特性,創(chuàng)建一個Date對象時,通常會調用newDate(…)而不是使用Date(…)。因為調用Date(…)實際返回的是對日期的字符串表示,而不是真正的Date對象。格式:{“date”:newDate()}
2023/1/125日期表示日期類型存儲是從標準紀元開始的毫秒數(shù),不存儲時區(qū)。2ObjectID詳解不同的機器都能用全局唯一的同種方法方便的生成它。ObjectId使用12字節(jié)的存儲空間,其生成方式如下:4e931cb6edcd881e1900017f時間戳機器IDPID計數(shù)器時間戳保證秒級唯一,機器ID保證設計時考慮分布式,避免時鐘同步,PID保證同一臺服務器運行多個mongod實例時的唯一性,最后的計數(shù)器保證同一秒內的唯一性。2023/1/126ObjectID詳解不同的機器都能用全局唯一的同種方法方便的字符串表示由于字符采用的UTF-8編碼,目的就是為了實現(xiàn)字符串的可變格式和可變長度。\0標識字符
串長度字符串內容參考:/html/3586.htmlLEN=n+5=長度(4字節(jié))+字符串(n字節(jié))+(1字節(jié))2023/1/127字符串表示由于字符采用的UTF-8編碼,目的就是為了實現(xiàn)字符BSON格式存儲例:{a:'12'}BSON結構如下:Len|vtype|key|0|v|E
長度|value類型|key|0|value|結束符號
4|1|1|1|2|1=10字節(jié)2023/1/128BSON格式存儲例:{a:'12'}2022/12/2728軟實力——文件在MongoDB內部,每個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變得越來越多。所以如果系統(tǒng)中有一個叫做test的數(shù)庫,那么構成test這個數(shù)據(jù)庫的文件就會由test.ns,test.0,test.1等等組成。其中*.ns是包含命名空間的文件,保存該數(shù)據(jù)庫數(shù)據(jù)的相關信息。*.0和*.1是數(shù)據(jù)文件。32位系統(tǒng)的MongoDB服務器每一個Mongod實例只能使用2G的數(shù)據(jù)文件。這是由于地址指針只能支持32位。2023/1/129軟實力——文件在MongoDB內部,每個數(shù)據(jù)庫都包含一個.n命名空間在數(shù)據(jù)文件內部,每個數(shù)據(jù)庫都是按照命名空間組織的,一種類別的數(shù)據(jù)與其他類別的分開存放。每個集合的文檔都有自己的命名空間,索引也是。命名空間的元數(shù)據(jù)存放在數(shù)據(jù)庫的.ns文件中。每個命名空間的數(shù)據(jù)都被分成若干組,放到數(shù)據(jù)文件的某一區(qū)域內,這個區(qū)域稱為數(shù)據(jù)域。在圖中可以看到數(shù)據(jù)庫foo有3個數(shù)據(jù)文件,其中第
3個是預分配的空文件。前兩個數(shù)據(jù)文件被分成幾個數(shù)據(jù)域,屬于幾個不同的命名空間。2023/1/130命名空間在數(shù)據(jù)文件內部,每個數(shù)據(jù)庫都是按照命名空間組織的,一軟實力——存儲過程2023/1/131下圖展示了數(shù)據(jù)庫是如何跟底層系統(tǒng)打交道的軟實力——存儲過程2022/12/2731下圖展示了數(shù)據(jù)庫是虛擬地址空間2023/1/132虛擬地址空間2022/12/2732內部文件格式在名字空間文件中,保存了每個名字空間的存儲信息元數(shù)據(jù),包括其大小,塊數(shù),第一塊位置,最后一塊位置,被刪除的塊的鏈表以及索引信息2023/1/133內部文件格式在名字空間文件中,保存了每個名字空間的存儲信息元塊結構各個Extent(塊)采用雙鏈表的形式連接2023/1/134塊結構各個Extent(塊)采用雙鏈表的形式連接2022/1塊和記錄各個文檔數(shù)據(jù)也是采用雙鏈表的形式連接2023/1/135塊和記錄各個文檔數(shù)據(jù)也是采用雙鏈表的形式連接2022/12/塊相關特性1.每一條記錄在塊內從4的倍數(shù)的字節(jié)處開始2.塊的大小不會動態(tài)擴增3.盡量數(shù)據(jù)不跨塊,但若記錄的大小大于一個塊的大小,必然會跨塊4.相似記錄計量保持在同一個塊中2023/1/136塊相關特性1.每一條記錄在塊內從4的倍數(shù)的字節(jié)處開始2022軟實力——選擇查詢MySQL:
SELECT*FROMuserMongo:
db.user.find()MySQL:
SELECT*FROMuserWHEREname='foobar'Mongo:
db.user.find({'name':'foobar'})2023/1/137軟實力——選擇查詢MySQL:2022/12/2737MySQL:
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/1/138MySQL:軟實力——插入2022/12/2738
MongoDB在執(zhí)行插入時,首先,會將插入的數(shù)據(jù)轉換成BSON格式;然后,MongoDB數(shù)據(jù)庫會對BSON進行解析,并且檢查是否存在“_id”鍵(_id鍵在插入數(shù)據(jù)庫時MongoDB會自動生成)。MongoDB還對文檔的大小做了限制。1.8之前的版本,文檔不能超過4MB;1.8之后的版本支持16MB。除了這些之外,沒有別的數(shù)據(jù)校驗,就是簡單的將文檔原樣存入數(shù)據(jù)庫中。這樣做的壞處是允許插入無限數(shù)據(jù);好處就是不會受到注入式攻擊,讓數(shù)據(jù)庫更加安全。MongoDB在記錄長度變化后,發(fā)現(xiàn)當前記錄所在空間后面沒有空余的空間可供其變長。那么這條記錄就會被刪除然后移動到數(shù)據(jù)集的最后。2023/1/139
MySQL:
DELETE*FROMuserMongo:
db.user.remove({})MySQL:
DELETEFROMuserWHEREage<30Mongo:
db.user.remove({'age':{$lt:30}})$gt:>;$gte:>=;$lt:<;$lte:<=;$ne:!=軟實力——刪除2023/1/140MySQL:軟實力——刪除2022/12/2740刪除原理位置通過DiskLoc數(shù)據(jù)結構進行存儲,存儲了數(shù)據(jù)文件編號和塊在文件中的位置,刪除的塊或者域都會在DletedList中標記,并不是直接抹掉。2023/1/141刪除原理位置通過DiskLoc數(shù)據(jù)結構進行存儲,存儲了數(shù)MySQL:
UPDATEuserSET`age`=36WHERE`name`='foobar'Mongo:
db.user.update({'name':'foobar'},{$set:{'age':36}})MySQL:UPDATEuserSET`age`=`age`+3WHERE`name`='foobar'Mongo:db.user.update({'name':'foobar'},{$inc:{'age':3}})軟實力——更新2023/1/142MySQL:軟實力——更新2022/12/2742謝謝觀看!2023/1/143謝謝觀看!2022/12/2743mongoDB的概述與存儲結構匯報人:※※※2023/1/144mongoDB的概述與存儲結構匯報人:※※※2022/12/01第一章mongoDB概述02第二章存儲體系結構背后的故事硬實力軟實力Contents目錄崛起的法寶2023/1/14501第一章mongoDB概述02第二章存儲體系結構背后的背后的故事1崛起的法寶2第一章mongoDB概述2023/1/146背后的故事1崛起的法寶2第一章mongoDB概述2022/背后的故事——Web2.0來襲1.互聯(lián)網應用用戶量劇增2.數(shù)據(jù)量呈幾何級數(shù)增長3.高并發(fā)的讀寫2023/1/147背后的故事——Web2.0來襲1.互聯(lián)網應用用戶量劇增202背后的故事——RDBMS的困境1.數(shù)據(jù)庫并發(fā)負載高2.海量數(shù)據(jù)存儲和訪問3.數(shù)據(jù)庫數(shù)據(jù)越來越大4.事務管理的負擔5.對關系型數(shù)據(jù)庫讀/寫實時性的忽略6.多表關聯(lián)查詢被弱化2023/1/148背后的故事——RDBMS的困境1.數(shù)據(jù)庫并發(fā)負載高2022/背后的故事——NoSQL的崛起NoSQL全稱是NotOnlySql,指的是非關系型的數(shù)據(jù)庫。NoSQL數(shù)據(jù)庫主要應用于web2.0的大規(guī)模系統(tǒng),具有模式靈活、最終一致性、面向海量數(shù)據(jù)、分布式、開源、水平可擴展、配置簡單、非關系型等特點。存儲類型NoSQL產品特性列式存儲Hbase、CassandraHypertable按列存儲數(shù)據(jù),最大的特點是方便存儲結構和半結構化數(shù)據(jù),方便做數(shù)據(jù)壓縮,針對某一列或者某幾列的查詢有非常大的I/O優(yōu)勢鍵值存儲Redis、TokyoCabinetTokyoTyrant、Flare可以通過鍵快速查詢到值。一般來說,存儲不管值的格式,照單全收文檔式存儲MongoDB、CouchDB文檔存儲一般用類似JSON格式存儲,存儲的內容是文檔類型的,這樣也就有機會對某些字段建立索引,實現(xiàn)關系型數(shù)據(jù)庫的某些功能對象式存儲db4oVersant通過類似面向對象語言的語法操作數(shù)據(jù)庫,通過對象的方式存取數(shù)據(jù)2023/1/149背后的故事——NoSQL的崛起NoSQL全稱是NotOnl背后的故事——mongoDB的前世今生2007年10月,MongoDB由10gen團隊所發(fā)展,2009年2月首度推出MongoDB是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產品MongoDB是由C++語言編寫的開源數(shù)據(jù)庫系統(tǒng)MongoDB服務端可運行在Linux、Windows或OS
X平臺,支持32位和64位應用2023/1/150背后的故事——mongoDB的前世今生2007年10月,Mo崛起的法寶——vsRDBMS2023/1/151崛起的法寶——vsRDBMS2022/12/278崛起的法寶——數(shù)據(jù)模型MongoDB數(shù)據(jù)庫是一個面向集合且模式自由的文檔類型數(shù)據(jù)庫。1.面向集合面向集合是指數(shù)據(jù)被分組存在在數(shù)據(jù)集中,被稱為一個集合(Collencton==table)。集合類似于關系型數(shù)據(jù)庫的表(table),不同于表的是,集合不需要定義任何模式,集合在存儲文檔,一個文檔類似于關系型數(shù)據(jù)庫的一條記錄。在MongoDB中,要操作一個表并不需要創(chuàng)建它,可以直接往集合中插入數(shù)據(jù),如果集合不存在,它會自動創(chuàng)建這個集合。2.模式自由模式自由就是對存儲在MongoDB數(shù)據(jù)庫中的數(shù)據(jù),我們不需要知道它是什么結構(可以是任何的文檔)。3.文檔型文檔型存儲的數(shù)據(jù)是鍵值對的集合,鍵是字符串,值可以是數(shù)據(jù)類型集合中的任意類型,包括數(shù)組和文檔。我們把這個數(shù)據(jù)格式稱為BSON(BinarySerializedDocumentNotation)2023/1/152崛起的法寶——數(shù)據(jù)模型MongoDB數(shù)據(jù)庫是一個面向集合且崛起的法寶——功能性1.完整的索引支持:可以對文檔創(chuàng)建索引,甚至還可以對內嵌文檔以及數(shù)組創(chuàng)建索引。MongoDB的查詢優(yōu)化器會自動分析查詢語句,然后生成一個高效的查詢集合。2.動態(tài)查詢:MongoDB的查詢指令使用JSON形式,使查詢表達式變得非常豐富,還可以非常容易地查詢文檔中的內嵌對象和數(shù)組。3.查詢監(jiān)視:MongoDB提供了很多性能監(jiān)視工具,用于分析數(shù)據(jù)庫操作的性能。
2023/1/153崛起的法寶——功能性1.完整的索引支持:可以對文檔創(chuàng)建索引,崛起的法寶——功能性(續(xù))4.復制及自動故障轉移:MongoDB數(shù)據(jù)庫支持服務器之間的復制,從節(jié)點可以復制主節(jié)點的數(shù)據(jù),主節(jié)點的所有對數(shù)據(jù)的操作都會同步到從節(jié)點。從節(jié)點的數(shù)據(jù)跟主節(jié)點的數(shù)據(jù)是完全一樣的,以作備份。主節(jié)點發(fā)生故障之后,從節(jié)點可以升級為主節(jié)點,也可以通過從節(jié)點對故障主節(jié)點進行數(shù)據(jù)恢復。5.高效地傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象(如視頻),可以將圖片文件甚至視頻轉換成二進制的數(shù)據(jù)存儲到數(shù)據(jù)庫中。6.自動分片以支持云級別的伸縮性:可以水平擴展數(shù)據(jù)庫集群,動態(tài)添加片(服務器)。2023/1/154崛起的法寶——功能性(續(xù))4.復制及自動故障轉移:Mongo崛起的法寶——其他招式1.拓展功能強大2.便于管理3.適用于多種場合2023/1/155崛起的法寶——其他招式1.拓展功能強大2022/12/271硬實力1軟實力2第二章存儲結構2023/1/156硬實力1軟實力2第二章存儲結構2022/12/2713HDDSSD隨機訪問(IOPS)12512000
(100x)順序讀寫(Throughput)~100MB/s~200MB/s(2x)VS.硬實力——磁盤數(shù)據(jù)的存儲總離不開磁盤,因此mongodb的數(shù)據(jù)存儲設備當然也只能是磁盤。官方建議采用SSD固態(tài)硬盤。HDDSSD隨機訪問(IOPS)12512000(100mongodData
file
SSD
Journal
HDDLog
HDD優(yōu)化的IO部署方案mongodDatafile
SSDJournalHD數(shù)據(jù)IO:隨機訪問為主{
x:
12
}DiskLoc:
xxRead:
DiscLoc:
xxDisckLoc:
xx123數(shù)據(jù)IO:隨機訪問為主{x:12}DiskLoc:x無冗余寫性能一般寫入速度慢條帶化+鏡像性能好+數(shù)據(jù)冗余建議的RAIDLevel無冗余寫性能一般寫入速度慢條帶化+鏡像建議的RAIDLev硬實力——存儲引擎存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分。它的主要職責就是負責把數(shù)據(jù)存儲到硬盤和把數(shù)據(jù)從硬盤檢索出來。MySQL和Riak均支持多個不同的存儲引擎。不同的存儲引擎對不同的應用需求有特別的優(yōu)化。如某個存儲引擎可以是專為高并發(fā)寫設計的,而另一個則是為高壓縮率設計從而達到節(jié)省磁盤空間的目標。mongoDB默認采用的存儲引擎是操作系統(tǒng)底層提供的內存映射文件(MMAP)(至今也只有一種)。2023/1/161硬實力——存儲引擎存儲引擎是數(shù)據(jù)庫管理系統(tǒng)的一個重要組成部分硬實力——內存映射物理內存010000硬盤480200480虛擬內存100000200
mmap()Pagefault,10ms頁面不在內存,缺頁中斷
10ms頁面已在內存,50us1234硬實力——內存映射物理內存010000硬盤480200480硬實力——故障恢復復制集硬實力——故障恢復復制集一個典型的集群結構如下:Shards
每一個shard包括一個或多個服務和存儲數(shù)據(jù)的mongod進程(mongod是MongoDB數(shù)據(jù)的核心進程),典型的每個shard開啟多個服務來提高服務的可用性。這些服務/mongod進程在shard中組成一個復制集。硬實力——負載均衡2023/1/164一個典型的集群結構如下:Shards
每一個shard包括一軟實力——數(shù)據(jù)類型null
布爾
ture|false整數(shù)
123浮點
12.3字符串
“helloworld”對象ID
用newObjectId()來申明。日期用newDate()來申明時間戳數(shù)組
[“apple”,”blanan”,”pear”]內嵌文檔{“username”:“jone”,“age”:13,“contact”:{“home”:”123”,”moblie”:”456”}}RegExp
正則表達式/[a-z]/2023/1/165軟實力——數(shù)據(jù)類型null2022/12/2722數(shù)字型表示MongoDB對整型數(shù)字的存儲分兩個級別,一個32位的,一是64位的。浮點數(shù)MongoDB僅支持64位的雙精度浮點數(shù)。整數(shù)表示法:64位浮點數(shù)表示法:0000000000000000000000000000000000000000000000000000000000000001mongo內部,所有數(shù)字都是用long存儲,所以單個數(shù)字是8字節(jié)2023/1/166數(shù)字型表示MongoDB對整型數(shù)字的存儲分兩個級別,一個32字符型表示MongoDB的所有字符均采用UTF-8編碼。UTF-8(8-bitUnicodeTransformationFormat)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由KenThompson于1992年創(chuàng)建。現(xiàn)在已經標準化為RFC3629。UTF-8用1到6個字節(jié)編碼UNICODE字符。2023/1/167字符型表示MongoDB的所有字符均采用UTF-8編碼。UT日期表示日期類型存儲是從標準紀元開始的毫秒數(shù),不存儲時區(qū)。JavaScript中,Date對象用作MongoDB的日期類型,由于JavaScript本身的特性,創(chuàng)建一個Date對象時,通常會調用newDate(…)而不是使用Date(…)。因為調用Date(…)實際返回的是對日期的字符串表示,而不是真正的Date對象。格式:{“date”:newDate()}
2023/1/168日期表示日期類型存儲是從標準紀元開始的毫秒數(shù),不存儲時區(qū)。2ObjectID詳解不同的機器都能用全局唯一的同種方法方便的生成它。ObjectId使用12字節(jié)的存儲空間,其生成方式如下:4e931cb6edcd881e1900017f時間戳機器IDPID計數(shù)器時間戳保證秒級唯一,機器ID保證設計時考慮分布式,避免時鐘同步,PID保證同一臺服務器運行多個mongod實例時的唯一性,最后的計數(shù)器保證同一秒內的唯一性。2023/1/169ObjectID詳解不同的機器都能用全局唯一的同種方法方便的字符串表示由于字符采用的UTF-8編碼,目的就是為了實現(xiàn)字符串的可變格式和可變長度。\0標識字符
串長度字符串內容參考:/html/3586.htmlLEN=n+5=長度(4字節(jié))+字符串(n字節(jié))+(1字節(jié))2023/1/170字符串表示由于字符采用的UTF-8編碼,目的就是為了實現(xiàn)字符BSON格式存儲例:{a:'12'}BSON結構如下:Len|vtype|key|0|v|E
長度|value類型|key|0|value|結束符號
4|1|1|1|2|1=10字節(jié)2023/1/171BSON格式存儲例:{a:'12'}2022/12/2728軟實力——文件在MongoDB內部,每個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,而且這些數(shù)據(jù)文件會隨著數(shù)據(jù)量的增加而變得越來越多。所以如果系統(tǒng)中有一個叫做test的數(shù)庫,那么構成test這個數(shù)據(jù)庫的文件就會由test.ns,test.0,test.1等等組成。其中*.ns是包含命名空間的文件,保存該數(shù)據(jù)庫數(shù)據(jù)的相關信息。*.0和*.1是數(shù)據(jù)文件。32位系統(tǒng)的MongoDB服務器每一個Mongod實例只能使用2G的數(shù)據(jù)文件。這是由于地址指針只能支持32位。2023/1/172軟實力——文件在MongoDB內部,每個數(shù)據(jù)庫都包含一個.n命名空間在數(shù)據(jù)文件內部,每個數(shù)據(jù)庫都是按照命名空間組織的,一種類別的數(shù)據(jù)與其他類別的分開存放。每個集合的文檔都有自己的命名空間,索引也是。命名空間的元數(shù)據(jù)存放在數(shù)據(jù)庫的.ns文件中。每個命名空間的數(shù)據(jù)都被分成若干組,放到數(shù)據(jù)文件的某一區(qū)域內,這個區(qū)域稱為數(shù)據(jù)域。在圖中可以看到數(shù)據(jù)庫foo有3個數(shù)據(jù)文件,其中第
3個是預分配的空文件。前兩個數(shù)據(jù)文件被分成幾個數(shù)據(jù)域,屬于幾個不同的命名空間。2023/1/173命名空間在數(shù)據(jù)文件內部,每個數(shù)據(jù)庫都是按照命名空間組織的,一軟實力——存儲過程2023/1/174下圖展示了數(shù)據(jù)庫是如何跟底層系統(tǒng)打交道的軟實力——存儲過程2022/12/2731下圖展示了數(shù)據(jù)庫是虛擬地址空間2023/1/175虛擬地址空間2022/12/2732內部文件格式在名字空間文件中,保存了每個名字空間的存儲信息元數(shù)據(jù),包括其大小,塊數(shù),第一塊位置,最后一塊位置,被刪除的塊的鏈表以及索引信息2023/1/176內部文件格式在名字空間文件中,保存了每個名字空間的存儲信息元塊結構各個Extent(塊)采用雙鏈表的形式連接2023/1/177塊結構各個Extent(塊)采用雙鏈表的形式連接2022/1塊和記錄各個文檔數(shù)據(jù)也是采用雙鏈表的形式連接2023/1/178塊和記錄各個文檔數(shù)據(jù)也是采用雙鏈表的形式連接2022/12/塊相關特性1.每一條記錄在塊內從4的倍數(shù)的字節(jié)處開始2.塊的大小不會動態(tài)擴增3.盡量數(shù)據(jù)不跨塊,但若記錄的大小大于一個塊的大小,必然會跨塊4.相似記錄計量保持在同一個塊中2023/1/179塊相關特性1.每一條記錄在塊內從4的倍數(shù)的字節(jié)處開始2022軟實力——選擇查詢MySQL:
SELECT*FROMuserMongo:
db.user.find()MySQL:
SELECT*FROMuserWHEREname='foobar'Mongo:
db.user.find({'name':'foobar'})2023/1/180軟實力——選擇查詢MySQL:2022/12/2737MySQL:
INSERTINTOuser(`name`,`age`)values('foobar',25)Mongo:
db.user.insert({'name':'foobar','age':25})ifyouwantaddacolumn`email`onMySQL,youmust:
ALTERTABLEuser….ButinMongo,youcanjust:
db.user
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保型鋼管扣件運輸與回收利用協(xié)議3篇
- 二零二五版電子元件采購合同數(shù)量取消及供應鏈調整補充協(xié)議3篇
- 2024建造師勞動合同
- 2025年度民族特色餐廳租賃及文化傳承合作協(xié)議3篇
- 二零二五年房地產糾紛調解估價委托合同模板3篇
- 2024年項目聯(lián)合開發(fā)協(xié)議3篇
- 二零二五年度高品質建筑材料租賃與運輸管理合同3篇
- 二零二五版商用空調租賃與能源消耗優(yōu)化合同3篇
- 威海職業(yè)學院《突發(fā)公衛(wèi)事件應急處理》2023-2024學年第一學期期末試卷
- 天津城市職業(yè)學院《災害防御與避險應急》2023-2024學年第一學期期末試卷
- DB22T 5005-2018 注塑夾芯復合保溫砌塊自保溫墻體工程技術標準
- 醫(yī)院手術室醫(yī)院感染管理質量督查評分表
- 心內電生理導管及器械
- 稱量與天平培訓試題及答案
- 超全的超濾與納濾概述、基本理論和應用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國育齡女性生殖健康研究報告
- 各種靜脈置管固定方法
- 消防報審驗收程序及表格
- 教育金規(guī)劃ppt課件
- 呼吸機波形分析及臨床應用
評論
0/150
提交評論