• <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>
            posts - 15, comments - 10, trackbacks - 0, articles - 0

            此處的KFS是指Kosmos distributed file system,代碼位于http://sourceforge.net/projects/kosmosfs/,之后會(huì)寫幾篇相關(guān)的文章,以供后來(lái)者參考。

            KFS里Meta的內(nèi)存結(jié)構(gòu)主要是一棵B+樹,保存在內(nèi)存里,具體分析如下:

            B-樹,B+樹的定義

            關(guān)于這些樹的定義,最好還是參考算法導(dǎo)論等經(jīng)典書,網(wǎng)路上的信息有些不是很準(zhǔn)確,為了方便大家還是貼一個(gè)鏈接:

            http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

            KFS為何選用B+樹而非B樹?

            這是我個(gè)人的理解:

            雖然B樹可以在非葉子節(jié)點(diǎn)命中,會(huì)縮短一些平均查找長(zhǎng)度,但是B+樹在這種應(yīng)用一個(gè)優(yōu)勢(shì)就是每個(gè)節(jié)點(diǎn)都有指向next節(jié)點(diǎn)的指針,對(duì)于范圍查詢或者遍歷操作很適合。對(duì)于文件系統(tǒng)的一個(gè)ls某個(gè)子目錄的需求,用B+樹可以較高效的解決。

            KFSB+樹的類圖


            MetaNode
            base class for both internal and leaf nodes

            Metabase class for data objects (leaf nodes)

            Nodean internal node in the KFS search tree

            MetaChunkInfochunk information for a given file offset

            MetaDentry Directory entry, mapping a file name to a file id

            MetaFattrFile or directory attributes

            各節(jié)點(diǎn)的介紹

            1Meta類是子節(jié)點(diǎn)的父類,其最主要的成員變量是fid

            有三個(gè)葉子節(jié)點(diǎn):MetaChunkInfoMetaDentryMetaFattr

            2MetaDentry實(shí)現(xiàn)從文件名到fid的映射,對(duì)于每個(gè)文件(目錄)都擁有1個(gè)MetaDentry

            成員變量包括:

            dir:文件父目錄的fid

            namedentry的名稱,實(shí)際就是文件名

            3MetaFattr實(shí)現(xiàn)從fid到文件屬性的映射,對(duì)于每個(gè)文件(目錄)都擁有一個(gè)MetaFattr

            成員變量包括:

            Type:文件還是目錄

            numReplicas:文件有幾份副本

            mtime:修改時(shí)間

            ctime:屬性修改時(shí)間

            crtime:文件創(chuàng)建時(shí)間

            chunkcount:連續(xù)的chunk數(shù)目

            filesize:文件大小

            nextChunkOffset:最后一個(gè)chunk在文件的所處的offset

            mode_t mode:文件屬性(rwx位)

            key:由KFS_FATTRfid來(lái)構(gòu)成,可以通過(guò)fid直接找到保存文件屬性的節(jié)點(diǎn)。

            4MetaChunkInfo標(biāo)志某個(gè)文件對(duì)應(yīng)的chunk信息,如果一個(gè)文件包含多個(gè)chunk,那么需要有多個(gè)MetaChunkInfo

            成員變量包括:

            offsetchunk在文件中的偏移量,因?yàn)橐粋€(gè)文件可能由多個(gè)chunk組成

            chunkIdchunkid號(hào)

            chunkVersionchunkversion

            5Node實(shí)現(xiàn)的是B+樹的內(nèi)部節(jié)點(diǎn),這種節(jié)點(diǎn)僅僅作為索引用途,存儲(chǔ)實(shí)際元數(shù)據(jù)信息的節(jié)點(diǎn)位于最底部的葉子節(jié)點(diǎn)。

            成員變量包括:

            NKEY = 32:每個(gè)節(jié)點(diǎn)最多擁有的關(guān)鍵字?jǐn)?shù)目,實(shí)際上也就是最多擁有的子節(jié)點(diǎn)數(shù)目,如果多余這個(gè)值節(jié)點(diǎn)進(jìn)行分裂

            NSPLIT = NKEY / 2:分裂之后每個(gè)節(jié)點(diǎn)的關(guān)鍵字?jǐn)?shù)目

            NFEWEST = NKEY - NSPLIT:每個(gè)節(jié)點(diǎn)最少擁有的關(guān)鍵字?jǐn)?shù)目,如果少于這個(gè)值兩個(gè)節(jié)點(diǎn)進(jìn)行合并

            count:節(jié)點(diǎn)實(shí)際擁有的關(guān)鍵字?jǐn)?shù)目

            Key childKey[NKEY]:節(jié)點(diǎn)存儲(chǔ)的關(guān)鍵字列表

            MetaNode *childNode[NKEY]:節(jié)點(diǎn)指向子節(jié)點(diǎn)的指針列表

            Node *next:指向下一個(gè)同級(jí)節(jié)點(diǎn)的指針

            實(shí)際上每個(gè)內(nèi)部節(jié)點(diǎn)的階數(shù)為32,可以有32個(gè)子節(jié)點(diǎn),而每個(gè)葉子節(jié)點(diǎn)只保存一個(gè)key值。

            三類子節(jié)點(diǎn)在B+樹中如何分布?

            可以想象,必定是將同一類的節(jié)點(diǎn)聚集在一起。因此對(duì)于排序函數(shù)就是先比較節(jié)點(diǎn)類型,然后再對(duì)節(jié)點(diǎn)內(nèi)部的成員變量進(jìn)行比較。MetaDentry是根據(jù)dir(父目錄的id),MetaFattr是根據(jù)fidMetaChunkInfo是根據(jù)idchunkId來(lái)排序。

            一個(gè)不太相關(guān)的思考

            看上面的三類子節(jié)點(diǎn),我們可以發(fā)現(xiàn)chunk的位置信息并沒(méi)有保存在B+樹里,它是單獨(dú)保存在一個(gè)Map數(shù)據(jù)結(jié)構(gòu)里的,也不會(huì)在meta server里進(jìn)行持久化,而是每次chunk啟動(dòng)時(shí)向meta server來(lái)報(bào)告。之所以不做持久化,可以這樣來(lái)理解:

            只有Chunk服務(wù)器才能最終確定一個(gè)Chunk是否在它的硬盤上。Chunk服務(wù)器的錯(cuò)誤可能會(huì)導(dǎo)致Chunk自動(dòng)消失(比如,硬盤損壞了或者無(wú)法訪問(wèn)了),亦或者操作人員可能會(huì)重命名一個(gè)Chunk服務(wù)器,還是由chunk server來(lái)報(bào)告比較靠譜。

            亚洲国产综合久久天堂| 久久久久久久久久久久久久| 亚洲国产精品无码久久| 中文字幕精品久久| 色播久久人人爽人人爽人人片aV| 伊人久久综合热线大杳蕉下载| 国产精品久久久久国产A级| 久久99精品久久久久婷婷| 99精品久久久久久久婷婷| 欧美黑人激情性久久| 99久久无色码中文字幕 | 热久久国产精品| 久久九九全国免费| 久久精品国产亚洲一区二区三区| 久久福利片| 精品一二三区久久aaa片| 国产成人综合久久综合| 精品久久久久一区二区三区| 精品熟女少妇aⅴ免费久久| 久久婷婷是五月综合色狠狠| 无码精品久久久天天影视| 国产婷婷成人久久Av免费高清| 国产免费久久久久久无码| 久久99这里只有精品国产| 精品久久久久久无码中文字幕一区| 国产精品久久久久影视不卡| 久久99精品久久久久久不卡| 亚洲av伊人久久综合密臀性色| 久久九九青青国产精品| 亚洲伊人久久综合影院| 久久精品aⅴ无码中文字字幕重口| 香港aa三级久久三级| 国产精品一区二区久久精品涩爱| 俺来也俺去啦久久综合网| 亚洲欧美国产精品专区久久 | 久久综合久久综合久久| 亚洲香蕉网久久综合影视| 国产成人久久久精品二区三区| 色综合久久中文字幕综合网| 粉嫩小泬无遮挡久久久久久| 伊人久久大香线蕉AV一区二区 |