1.一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu),其特征在于,包括:
主控節(jié)點(diǎn):用于建立數(shù)據(jù)存儲(chǔ)單元Block到所在的物理機(jī)器的映射關(guān)系、統(tǒng)計(jì)全局負(fù)載情況以及生成數(shù)據(jù)存儲(chǔ)單元Block的ID;
數(shù)據(jù)導(dǎo)入管理器:用于對(duì)外部數(shù)據(jù)進(jìn)行緩沖,將外部數(shù)據(jù)按照數(shù)據(jù)值排序,生成索引Groupkey和數(shù)據(jù),然后生成數(shù)據(jù)存儲(chǔ)單元Block存儲(chǔ)索引Groupkey和數(shù)據(jù),最后導(dǎo)入數(shù)據(jù)存儲(chǔ)單元Block到存儲(chǔ)節(jié)點(diǎn);
存儲(chǔ)節(jié)點(diǎn):存儲(chǔ)數(shù)據(jù)存儲(chǔ)單元Block,對(duì)查詢者提供查詢功能;
存儲(chǔ)節(jié)點(diǎn)包括子元數(shù)據(jù)管理器、數(shù)據(jù)存儲(chǔ)單元Block、數(shù)據(jù)讀取器模塊;
子元數(shù)據(jù)管理器:用于維護(hù)存儲(chǔ)節(jié)點(diǎn)內(nèi)部由數(shù)據(jù)庫(kù)名、表名、列名唯一確定的列到數(shù)據(jù)存儲(chǔ)單元Block的映射、維護(hù)數(shù)據(jù)存儲(chǔ)單元Block的生命周期;
數(shù)據(jù)存儲(chǔ)單元Block:用于存儲(chǔ)索引Groupkey和數(shù)據(jù);
數(shù)據(jù)讀取器模塊:用于按照存儲(chǔ)的索引Groupkey提供范圍查詢和等值查詢接口,為外部提供了數(shù)據(jù)訪問(wèn),具有指向真實(shí)數(shù)據(jù)的指針。
2.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu),其特征在于:所述主控節(jié)點(diǎn)的元數(shù)據(jù)組織為由數(shù)據(jù)庫(kù)名、表名、列名唯一確定的列以及每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)中包含的列的列值范圍到存儲(chǔ)節(jié)點(diǎn)的地址的映射,主控節(jié)點(diǎn)的元數(shù)據(jù)組織的結(jié)構(gòu)為:<數(shù)據(jù)庫(kù)名、表名字,列名、列值范圍、存儲(chǔ)節(jié)點(diǎn)的地址>。
3.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu),其特征在于:存儲(chǔ)節(jié)點(diǎn)的元數(shù)據(jù)組織為由數(shù)據(jù)庫(kù)名、表名、列名唯一確定的列到數(shù)據(jù)存儲(chǔ)單元Block的映射,存儲(chǔ)節(jié)點(diǎn)的元數(shù)據(jù)組織的結(jié)構(gòu)為:<數(shù)據(jù)庫(kù)名、表名字、列名、列值范圍、數(shù)據(jù)存儲(chǔ)單元Block的ID>。
4.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu),其特征在于:數(shù)據(jù)存儲(chǔ)單元Block存儲(chǔ)數(shù)據(jù)的方式為:以索引Groupkey加數(shù)據(jù)的方式存儲(chǔ)在數(shù)據(jù)存儲(chǔ)單元Block當(dāng)中,一個(gè)數(shù)據(jù)存儲(chǔ)單元Block包含一張表的若干列或全部的列,每張表的所有的列都會(huì)在數(shù)據(jù)存儲(chǔ)單元Block中存儲(chǔ),在數(shù)據(jù)導(dǎo)入管理器生成這個(gè)數(shù)據(jù)存儲(chǔ)單元Block的時(shí)候,生成這個(gè)數(shù)據(jù)存儲(chǔ)單元Block對(duì)應(yīng)的元數(shù)據(jù),在存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)存儲(chǔ)單元的時(shí)候,記錄元數(shù)據(jù)到子元數(shù)據(jù)管理器;
數(shù)據(jù)存儲(chǔ)單元Block的頭部結(jié)構(gòu)分為定長(zhǎng)結(jié)構(gòu)和變長(zhǎng)兩個(gè)部分:
定長(zhǎng)部分包括:block_id、begin_rowid、rows;
block_id:表示數(shù)據(jù)存儲(chǔ)單元block的編號(hào),由數(shù)據(jù)導(dǎo)入管理器生成,全局唯一:每個(gè)數(shù)據(jù)存儲(chǔ)單元Block對(duì)應(yīng)著一個(gè)全局唯一的block_id;
begin_rowid:指明了這個(gè)數(shù)據(jù)存儲(chǔ)單元Block中所存儲(chǔ)的數(shù)據(jù)的起始的rowid;
rows:表明這個(gè)數(shù)據(jù)存儲(chǔ)單元Block中一共有多少行的數(shù)據(jù);
變長(zhǎng)部分包括column_offset;
column_offset:column_offset為一個(gè)數(shù)組,第i個(gè)值表示這個(gè)數(shù)據(jù)存儲(chǔ)單元Block中的第i個(gè)列的物理位置相對(duì)于數(shù)據(jù)存儲(chǔ)單元Block起始頭部的偏移量,i為自然數(shù)。
5.根據(jù)權(quán)利要求4所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu),其特征在于:所述column_offset的內(nèi)部邏輯結(jié)構(gòu)包括column_type部分和其余約定部分,column_type是頭部信息,其余約定部分是根據(jù)column_type部分由使用人員根據(jù)具體的需求具體約定。
6.根據(jù)權(quán)利要求5所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu),其特征在于:所述column_type指明數(shù)據(jù)組織方式是以Groupkey方式組織或者是以鍵值對(duì)方式組以及其對(duì)應(yīng)的壓縮方式,所述壓縮方式是字節(jié)壓縮或者是位壓縮;
索引Groupkey:是一種在內(nèi)存分布式列數(shù)據(jù)庫(kù)中的數(shù)據(jù)組織方式,其采用字典壓縮對(duì)每列內(nèi)容進(jìn)行壓縮,采用索引向量index對(duì)字典向量中某個(gè)值對(duì)應(yīng)在position向量中的范圍進(jìn)行界定,采用位置向量position存儲(chǔ)字典向量對(duì)應(yīng)的行號(hào)rowid的集合,同時(shí),有一個(gè)行表向量rowtable,行表向量rowtable是維持行關(guān)系的向量,行表向量rowtable里面存儲(chǔ)的是元素值在字典向量中的下標(biāo);結(jié)合索引Groupkey的特性,對(duì)于索引向量index,存儲(chǔ)對(duì)應(yīng)的位壓縮或者字節(jié)壓縮后的值;對(duì)于位置向量position,我們只存儲(chǔ)其值相對(duì)于begin_rowid的偏移量;對(duì)于行表向量rowtable,其每一行與原始表一一對(duì)應(yīng),行表向量rowtable中的值是字典的下標(biāo),索引向量index、位置向量position、行表向量rowtable采用位壓縮或者字節(jié)壓縮。
7.根據(jù)權(quán)利要求1-6中任意一項(xiàng)所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu)的數(shù)據(jù)存儲(chǔ)方法,其特征在于:
S1、主控節(jié)點(diǎn)根據(jù)每張表的列的寬度和有多少列決定每個(gè)數(shù)據(jù)存儲(chǔ)單元Block中表的行數(shù)和列數(shù),以及所要發(fā)往的存儲(chǔ)節(jié)點(diǎn)的IP,將這些信息告訴數(shù)據(jù)導(dǎo)入管理器;
S2、數(shù)據(jù)導(dǎo)入管理器將外部數(shù)據(jù)源讀取上來(lái)的數(shù)據(jù)排序,生成數(shù)據(jù)字典,確定索引向量index、位置向量position、行表向量rowtable的壓縮的位寬或者字節(jié)寬度;
S3、數(shù)據(jù)導(dǎo)入管理器根據(jù)壓縮的位寬或者字節(jié)寬度,生成壓縮的索引向量index、位置向量position、行表向量rowtable,同時(shí)統(tǒng)計(jì)元數(shù)據(jù);根據(jù)數(shù)據(jù)存儲(chǔ)單元Block的內(nèi)部設(shè)計(jì),依次在數(shù)據(jù)存儲(chǔ)單元Block內(nèi)填入頭部信息和上述數(shù)據(jù)體;
S4、數(shù)據(jù)導(dǎo)入管理器將一個(gè)數(shù)據(jù)存儲(chǔ)單元Block的數(shù)據(jù)和數(shù)據(jù)存儲(chǔ)單元Block對(duì)應(yīng)的元數(shù)據(jù)信息發(fā)送給存儲(chǔ)節(jié)點(diǎn),同時(shí)發(fā)送一份對(duì)應(yīng)的元數(shù)據(jù)信息給主控節(jié)點(diǎn);
S5、存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)導(dǎo)入管理器發(fā)送的數(shù)據(jù)存儲(chǔ)單元Block,將對(duì)應(yīng)的元數(shù)據(jù)信息記錄到子元數(shù)據(jù)管理器;如果采用的運(yùn)行時(shí)庫(kù)提供了歸還操作系統(tǒng)未使用的內(nèi)存的接口,最后調(diào)用相應(yīng)接口,釋放多余內(nèi)存;
S6、主控節(jié)點(diǎn)將導(dǎo)入管理器發(fā)送的對(duì)應(yīng)的元數(shù)據(jù)記錄下來(lái)。
8.根據(jù)權(quán)利要求1-6中任意一項(xiàng)所述的一種分布式數(shù)據(jù)存儲(chǔ)架構(gòu)的數(shù)據(jù)查詢方法,其特征在于:
查找數(shù)據(jù)庫(kù)ID為db_id,表名為table_name,列名為col_name的查找數(shù)據(jù)存儲(chǔ)單元Block的過(guò)程是:
D1、訪問(wèn)主控節(jié)點(diǎn),發(fā)送所要訪問(wèn)的數(shù)據(jù)的庫(kù)表列信息,以及包含對(duì)應(yīng)列的范圍的消息給主控節(jié)點(diǎn),
查詢包括以下兩種:
通過(guò)值查詢r(jià)owid :通過(guò)給定值范圍或者定值查詢匹配的rowid;通過(guò)rowid查詢值:通過(guò)給定rowid集合查詢每個(gè)rowid對(duì)應(yīng)的值;
D2、主控節(jié)點(diǎn)返回這次查詢請(qǐng)求涉及到的存儲(chǔ)節(jié)點(diǎn)的IP地址;
D3、查詢客戶端與對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)建立連接,并向?qū)?yīng)的存儲(chǔ)節(jié)點(diǎn)發(fā)送對(duì)應(yīng)的查詢請(qǐng)求;
D4、存儲(chǔ)節(jié)點(diǎn)收到查詢請(qǐng)求后,訪問(wèn)子元數(shù)據(jù)管理器,得到數(shù)據(jù)存儲(chǔ)單元Block的指針;
然后,存儲(chǔ)節(jié)點(diǎn)通過(guò)數(shù)據(jù)讀取器讀取到指定數(shù)據(jù);
D5、存儲(chǔ)節(jié)點(diǎn)返回結(jié)果給查詢客戶端,查詢客戶端收到了所有的數(shù)據(jù)后,本次查詢完畢。