0028] 3)查詢執(zhí)行引擎模塊3將合法的查詢條件與索引表41的rowkey匹配,判斷是否 能匹配到任意索引表41 ;
[0029] 4)查詢執(zhí)行引擎模塊3匹配到索引表41,然后查詢執(zhí)行引擎模塊3判斷索引表41 中是否包含與合法的查詢條件對(duì)應(yīng)的所有的過濾條件;
[0030] 5)索引表41中未包含與合法的查詢條件對(duì)應(yīng)的所有的過濾條件,使用索引表41 的列構(gòu)造過濾器,對(duì)索引表41進(jìn)行scan,得到數(shù)據(jù)表42的rowkey;
[0031] 6)使用合法的查詢條件構(gòu)造過濾器,使用步驟5)得到的rowkey對(duì)數(shù)據(jù)表42進(jìn)行 精確get;
[0032] 6)返回查詢結(jié)果給客戶端1。
[0033] 執(zhí)行上述步驟5)時(shí),如果索引表41中包含與合法的查詢條件對(duì)應(yīng)的所有的過濾 條件,使用合法的查詢條件構(gòu)造過濾器,對(duì)索引表41進(jìn)行scan,如果要求返回的列在該索 引表范圍內(nèi),則直接根據(jù)對(duì)索引表查詢的結(jié)果構(gòu)造查詢結(jié)果;如果要求返回的列不在索引 表范圍內(nèi),則需要使用rowkey對(duì)數(shù)據(jù)表進(jìn)行精確get,得到需要的列的數(shù)據(jù)。
[0034]另外,在上述步驟3)中查詢執(zhí)行引擎模塊3將合法的查詢條件與索引表41的 rowkey匹配,如果未匹配到索引表41的話,需要對(duì)數(shù)據(jù)表42進(jìn)行全表掃描,由于數(shù)據(jù)表42 存儲(chǔ)在SSD固態(tài)硬盤,讀寫速度快,最后將各種查詢結(jié)果返回給客戶端1。
[0035] 假設(shè)我們有一組學(xué)生的信息,如下表所示:
[0036]
[0037] 對(duì)應(yīng)的數(shù)據(jù)表結(jié)構(gòu)和數(shù)據(jù)如下:
[0038]student-data
[0039]
[0040] 對(duì)這張數(shù)據(jù)表,根據(jù)實(shí)際的查詢需求,有以下幾張索引表:
[0041 ]student_name
[0042]
[0043] student_job
[0044]
[0045] 對(duì)查詢請(qǐng)求:name="Zhao",則直接查詢索引表student_name則可以得到需要的 數(shù)據(jù)。
[0046] 對(duì)查詢請(qǐng)求:job= "教師",直接查詢索引表Student_j〇b則可以得到需要的數(shù) 據(jù);
[0047]對(duì)查詢請(qǐng)求:name= "Zhao" 且height= " 170",則使用name條件作為rowkey, height條件作為過濾列,查詢索引表student_name,得到需要的數(shù)據(jù);
[0048] 對(duì)查詢請(qǐng)求:name="Zhao" 且height="170" 且add="Shanxi",使用name條 件作為rowkey,height和add作為過濾列,查詢索引表student_name;
[0049] 對(duì)查詢請(qǐng)求:name="Zhao" 且height="170" 且age="20",使用name條件作 為rowkey,height作為過濾列,查詢索引表student_name,得到學(xué)生ID的集合,再使用這 些ID作為rowkey,age作為過濾列,對(duì)數(shù)據(jù)表student_data進(jìn)行精確查詢。
[0050] 以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳 細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡 在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保 護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. HBase二級(jí)索引存儲(chǔ)和查詢系統(tǒng),包括客戶端(I)、查詢處理模塊(2)、查詢執(zhí)行引擎 模塊⑶和HBase存儲(chǔ)模塊(4),所述的查詢處理模塊⑵收到客戶端⑴下發(fā)的查詢請(qǐng)求, 查詢處理模塊(2)從查詢請(qǐng)求中獲取查詢條件,查詢處理模塊(2)將合法的查詢條件發(fā)送 給查詢執(zhí)行引擎模塊(3),所述的查詢執(zhí)行引擎模塊(3)匹配查詢條件,從HBase存儲(chǔ)模塊 ⑷中找出滿足要求的數(shù)據(jù),其特征在于,所述的HBase存儲(chǔ)模塊⑷分別存儲(chǔ)索引表(41) 和數(shù)據(jù)表(42),所述的索引表(41)存儲(chǔ)在SATA硬盤上,所述的數(shù)據(jù)表(42)存儲(chǔ)在SSD固 態(tài)硬盤上。2. 根據(jù)權(quán)利要求1所述的HBase二級(jí)索引存儲(chǔ)和查詢系統(tǒng),其特征在于:所述的查詢 執(zhí)行引擎模塊(3)包括匹配模塊(31)和查詢模塊(32),所述的匹配模塊(31)用于找出合 法的查詢條件需要查詢的索引表(41)或數(shù)據(jù)表(42),所述的查詢模塊(32)用于在匹配模 塊(31)匹配成功后,將合法的查詢條件轉(zhuǎn)換為HBase存儲(chǔ)模塊(4)可以處理的查詢條件并 執(zhí)行查詢過程。3. 基于權(quán)利要求1所述的HBase二級(jí)索引存儲(chǔ)和查詢系統(tǒng)的查詢方法,其特征在于: 包括如下步驟: 1) 查詢處理模塊(2)接收客戶端(1)下發(fā)的查詢請(qǐng)求; 2) 查詢處理模塊(2)從查詢請(qǐng)求中獲取查詢條件,查詢處理模塊(2)將合法的查詢條 件發(fā)送給查詢執(zhí)行引擎模塊(3)進(jìn)行處理; 3) 查詢執(zhí)行引擎模塊(3)將合法的查詢條件與索引表(41)的rowkey匹配,判斷是否 能匹配到索引表(41); 4) 查詢執(zhí)行引擎模塊(3)匹配到索引表(41),然后查詢執(zhí)行引擎模塊(3)判斷索引表 (41)中是否包含與合法的查詢條件對(duì)應(yīng)的所有的過濾條件; 5) 索引表(41)中未包含與合法的查詢條件對(duì)應(yīng)的所有的過濾條件,使用索引表(41) 的列構(gòu)造過濾器,對(duì)索引表(41)進(jìn)行scan,得到數(shù)據(jù)表(42)的rowkey; 6) 使用合法的查詢條件構(gòu)造過濾器,使用步驟5)得到的rowkey對(duì)數(shù)據(jù)表(42)進(jìn)行精 確get; 7) 返回查詢結(jié)果給客戶端(1)。4. 根據(jù)權(quán)利要求3所述的查詢方法,其特征在于:所述的索引表(41)中包含與合法 的查詢條件對(duì)應(yīng)的所有的過濾條件,使用合法的查詢條件構(gòu)造過濾器,對(duì)索引表(41)進(jìn)行 scan,獲取數(shù)據(jù)表(42)的rowkey,使用得到的rowkey對(duì)數(shù)據(jù)表(42)進(jìn)行精確get。
【專利摘要】本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及HBase二級(jí)索引存儲(chǔ)和查詢系統(tǒng)及其查詢方法,包括客戶端、查詢處理模塊、查詢執(zhí)行引擎模塊和HBase存儲(chǔ)模塊。本發(fā)明將數(shù)據(jù)表存儲(chǔ)在SSD固態(tài)硬盤,相較于傳統(tǒng)的SATA硬盤,數(shù)據(jù)讀寫速度快,大大的提高了查詢效率。本發(fā)明同時(shí)優(yōu)化了匹配邏輯,可以使用索引表中包含的過濾列條件作為過濾器,對(duì)索引表進(jìn)行scan,得到數(shù)據(jù)表的rowkey;再使用查詢條件作為過濾器,使用rowkey對(duì)數(shù)據(jù)表進(jìn)行精確get,得到查詢結(jié)果,減少了對(duì)數(shù)據(jù)表的全表掃描,大大提高了查詢效率。
【IPC分類】G06F17/30
【公開號(hào)】CN105205162
【申請(qǐng)?zhí)枴緾N201510633271
【發(fā)明人】王勇強(qiáng), 趙智峰, 周帥鋒, 曹俊亮, 李佳寧, 韋蓉, 劉宇
【申請(qǐng)人】烽火通信科技股份有限公司
【公開日】2015年12月30日
【申請(qǐng)日】2015年9月29日