• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺(jué)的自豪,我所嘗試的事情都失敗了······習(xí)慣原本生活的人不容易改變,就算現(xiàn)狀很糟,他們也很難改變,在過(guò)程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛(ài)傳出去,很困難,也無(wú)法預(yù)料,人們需要更細(xì)心的觀察別人,要隨時(shí)注意才能保護(hù)別人,因?yàn)樗麄兾幢刂雷约阂裁础ぁぁぁぁ?/span>
            本文圖片來(lái)自 Ricky Ho 的博文 MongoDB 構(gòu)架MongoDB Architecture),這是個(gè)一聽(tīng)就感覺(jué)很寬泛的話(huà)題,但是作者在文章中確實(shí)對(duì) MongoDB 由內(nèi)至外的架構(gòu)進(jìn)行了剖析。本文截取了其文章中的幾張重點(diǎn)架構(gòu)示意圖片進(jìn)行簡(jiǎn)單描述。希望對(duì)大家有用。
            MongoDB 數(shù)據(jù)文件內(nèi)部結(jié)構(gòu)

            1. MongoDB 在數(shù)據(jù)存儲(chǔ)上按命名空間來(lái)劃分,一個(gè) collection 是一個(gè)命名空間,一個(gè)索引也是一個(gè)命名空間
            2. 同一個(gè)命名空間的數(shù)據(jù)被分成很多個(gè) Extent,Extent 之間使用雙向鏈表連接
            3. 在每一個(gè) Extent 中,保存了具體每一行的數(shù)據(jù),這些數(shù)據(jù)也是通過(guò)雙向鏈接連接的
            4. 每一行數(shù)據(jù)存儲(chǔ)空間不僅包括數(shù)據(jù)占用空間,還可能包含一部分附加空間,這使得在數(shù)據(jù) update 變大后可以不移動(dòng)位置
            5. 索引以 BTree 結(jié)構(gòu)實(shí)現(xiàn)
              在 MongoDB 中實(shí)現(xiàn)事務(wù)

            眾所周知,MongoDB 只支持對(duì)單行記錄的原子性修改,并不支持對(duì)多行數(shù)據(jù)的原子操作。但是通過(guò)上圖中的變態(tài)操作,實(shí)際你也可以自己實(shí)現(xiàn)事務(wù)。其步驟如圖所未:
            • 第 1 步:先記錄一條事務(wù)記錄,將要修改的多行記錄的修改值寫(xiě)到里面,并設(shè)置其狀態(tài)為 init(如果這時(shí)候操作中斷,那么在重新啟動(dòng)時(shí),會(huì)判斷到他處于 init 狀態(tài),從而將其保存的多行修改操作應(yīng)用到具體的行上)
            • 第 2 步:然后更新具體要修改的行,將剛才寫(xiě)的事務(wù)記錄的標(biāo)識(shí)寫(xiě)到它的 tran 字段中
            • 第 3 步:將事務(wù)記錄的狀態(tài)從 init 變成 pending(如果在這時(shí)候操作中斷,那么在重新啟動(dòng)時(shí),會(huì)判斷到它的狀態(tài)是 pending 的,這時(shí)候查看其所有對(duì)應(yīng)的多條要修改的記錄,如果其 tran 有值,那么就進(jìn)行第 4 步,如果沒(méi)值,說(shuō)明第 4 步已經(jīng)執(zhí)行過(guò)了,直接將其狀態(tài)從 pending 變成 commited 了就行)
            • 第 4 步:將需要修改的多條記錄的相應(yīng)值修改了,并且 unset 掉之前的 tran 字段
            • 第 5 步:將事務(wù)記錄那一條的狀態(tài)從 pending 變成 commited,事務(wù)完成

                    其實(shí)上面的步驟并不罕見(jiàn),在支持事務(wù)的 DBMS 中,其事務(wù)原子性提交的保證大多都與上面類(lèi)似。其實(shí)事務(wù)記錄的 tran 那條記錄,就類(lèi)似于這些 DBMS 中的 redolog 一樣。

              MongoDB 數(shù)據(jù)同步

            上圖是 MongoDB 采用 Replica Sets 模式的同步流程
            • 紅色箭頭表示寫(xiě)操作寫(xiě)到 Primary 上,然后異步同步到多個(gè) Secondary 上
            • 藍(lán)色箭頭表示讀操作可以從 Primary 或 Secondary 任意一個(gè)上讀
            • 各個(gè) Primary 與 Secondary 之間一直保持心跳同步檢測(cè),用于判斷 Replica Sets 的狀態(tài)

                    分片機(jī)制


            • MongoDB 的分片是指定一個(gè)分片 key 來(lái)進(jìn)行,數(shù)據(jù)按范圍分成不同的 chunk,每個(gè) chunk 的大小有限制
            • 有多個(gè)分片節(jié)點(diǎn)保存這些 chunk,每個(gè)節(jié)點(diǎn)保存一部分的 chunk
            • 每一個(gè)分片節(jié)點(diǎn)都是一個(gè) Replica Sets,這樣保證數(shù)據(jù)的安全性
            • 當(dāng)一個(gè) chunk 超過(guò)其限制的最大體積時(shí),會(huì)分裂成兩個(gè)小的 chunk
            • 當(dāng) chunk 在分片節(jié)點(diǎn)中分布不均衡時(shí),會(huì)引發(fā) chunk 遷移操作

                    服務(wù)器角色

             

             上面講了分片的標(biāo)準(zhǔn),下面是具體在分片時(shí)的幾種節(jié)點(diǎn)角色
            • 客戶(hù)端訪(fǎng)問(wèn)路由節(jié)點(diǎn) mongos 來(lái)進(jìn)行數(shù)據(jù)讀寫(xiě)
            • config 服務(wù)器保存了兩個(gè)映射關(guān)系,一個(gè)是 key 值的區(qū)間對(duì)應(yīng)哪一個(gè) chunk 的映射關(guān)系,另一個(gè)是 chunk 存在哪一個(gè)分片節(jié)點(diǎn)的映射關(guān)系
            • 路由節(jié)點(diǎn)通過(guò) config 服務(wù)器獲取數(shù)據(jù)信息,通過(guò)這些信息,找到真正存放數(shù)據(jù)的分片節(jié)點(diǎn)進(jìn)行對(duì)應(yīng)操作
            • 路由節(jié)點(diǎn)還會(huì)在寫(xiě)操作時(shí)判斷當(dāng)前 chunk 是否超出限定大小,如果超出,就分列成兩個(gè) chunk
            • 對(duì)于按分片 key 進(jìn)行的查詢(xún)和 update 操作來(lái)說(shuō),路由節(jié)點(diǎn)會(huì)查到具體的 chunk 然后再進(jìn)行相關(guān)的工作
            • 對(duì)于不按分片 key 進(jìn)行的查詢(xún)和 update 操作來(lái)說(shuō),mongos 會(huì)對(duì)所有下屬節(jié)點(diǎn)發(fā)送請(qǐng)求然后再對(duì)返回結(jié)果進(jìn)行合并

                    更多詳細(xì)內(nèi)容請(qǐng)看原文:MongoDB Architecture

             

            posted on 2012-12-19 11:52 小果子 閱讀(422) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 學(xué)習(xí)筆記SQL開(kāi)源
            久久精品成人| 国产精品久久久久久吹潮| 国产一区二区三区久久| 99国产欧美久久久精品蜜芽| 久久99国产精品99久久| 一本色道久久88综合日韩精品 | 一级a性色生活片久久无| 久久青青草视频| 国产欧美久久久精品| 久久人人爽人人人人爽AV| 99久久人妻无码精品系列| 欧美精品福利视频一区二区三区久久久精品| 久久精品不卡| 中文字幕亚洲综合久久2| 超级碰碰碰碰97久久久久| 婷婷综合久久中文字幕| 伊人久久无码中文字幕| 爱做久久久久久| 青青草原精品99久久精品66| 九九久久精品无码专区| 久久人人爽爽爽人久久久| 婷婷久久综合| 国产精品内射久久久久欢欢| 久久久精品2019免费观看| 亚洲欧美日韩精品久久亚洲区| 秋霞久久国产精品电影院| 久久精品人成免费| 亚洲香蕉网久久综合影视 | 久久久久亚洲av成人网人人软件| 久久精品国产亚洲麻豆| 人妻无码久久一区二区三区免费| 久久精品亚洲精品国产欧美| 99久久人妻无码精品系列蜜桃| 亚洲国产精品久久电影欧美| 中文字幕无码久久久| 中文字幕亚洲综合久久菠萝蜜| 久久中文字幕无码专区| 理论片午午伦夜理片久久 | 国产精品欧美久久久天天影视| 亚洲综合伊人久久综合| 中文字幕乱码久久午夜|