1. 寫(xiě)在前面

說(shuō)起B(yǎng)+樹(shù),大家應(yīng)該都很熟悉。B+樹(shù)是一種平衡的多路搜索樹(shù),廣泛在操作系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)用作索引。相比于內(nèi)存的存取速度,磁盤(pán)I/O存取的開(kāi)銷(xiāo)要高上幾個(gè)數(shù)量級(jí)。而將B+樹(shù)用作索引時(shí),它可以在查找過(guò)程有效地減少磁盤(pán)I/O操作次數(shù)。

一般涉及B+Tree的書(shū)籍和文章都會(huì)提到它廣泛用作外存的索引中,但是并沒(méi)有詳細(xì)講解怎么實(shí)現(xiàn)。本文打算獨(dú)辟蹊徑,基于以前實(shí)現(xiàn)過(guò)的一個(gè)程序,介紹怎么實(shí)現(xiàn)一個(gè)簡(jiǎn)單可用的磁盤(pán)B+樹(shù)。

本文對(duì)B+樹(shù)的基礎(chǔ)知識(shí)就不再贅言。磁盤(pán)中的B+樹(shù)以文件的形式將整體都存放磁盤(pán)當(dāng)中,使用時(shí)只在內(nèi)存中緩存部份結(jié)構(gòu)。在本文中,數(shù)據(jù)塊和結(jié)點(diǎn)這兩個(gè)詞語(yǔ)都代表了B+樹(shù)的一個(gè)結(jié)點(diǎn)。

當(dāng)然本文作者水平有限,如有錯(cuò)誤,還請(qǐng)大家給予指出。

2. 簡(jiǎn)單實(shí)現(xiàn)

將B+樹(shù)存放于磁盤(pán)之中,第一步先定自義文件的格式,以便于讀回的時(shí)候可以正確解析文件的數(shù)據(jù)。

2.1 B+樹(shù)文件的格式

B+樹(shù)的結(jié)點(diǎn)在內(nèi)存中使用指針進(jìn)行結(jié)點(diǎn)之間的串聯(lián),指針值是結(jié)點(diǎn)的第一個(gè)字節(jié)的虛擬內(nèi)存地址。而對(duì)應(yīng)的在磁盤(pán)中可以用所在的數(shù)據(jù)塊的第一個(gè)字節(jié)相對(duì)文件頭部的偏移量來(lái)標(biāo)識(shí)。

索引文件主要分兩個(gè)部份組成:

  1. 文件頭:描述本文件的信息。
  2. 數(shù)據(jù)塊:對(duì)應(yīng)于B+樹(shù)各個(gè)結(jié)點(diǎn)的數(shù)據(jù)。

2.1.1 文件頭的格式:

typedef struct tag_BTREE_HEADER
{ // base int _magicNum; size_t _orderNum; size_t _nodeNum; 
        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式