HBase二級(jí)索引存儲(chǔ)和查詢(xún)系統(tǒng)及其查詢(xún)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及HBase二級(jí)索引存儲(chǔ)和查詢(xún)系統(tǒng)及其查 詢(xún)方法。
【背景技術(shù)】
[0002] 隨著大數(shù)據(jù)技術(shù)的發(fā)展和應(yīng)用,HBase逐漸成為業(yè)界廣泛使用的NoSQL分布式存 儲(chǔ)系統(tǒng),它具有高可靠、面向列、開(kāi)源等特點(diǎn),已被Facebook、阿里巴巴等公司成功用于生產(chǎn) 系統(tǒng)。如何對(duì)HBase進(jìn)行高效的二級(jí)索引存儲(chǔ)、查詢(xún)是業(yè)界研究的熱點(diǎn),目前被廣泛使用的 方案架構(gòu)如圖3所示,該方案主要包含三個(gè)模塊:HBase存儲(chǔ)模塊、查詢(xún)處理模塊、查詢(xún)執(zhí)行 引擎三部分。HBase存儲(chǔ)模塊負(fù)責(zé)原始數(shù)據(jù)和索引數(shù)據(jù)的存儲(chǔ),具有分布式、大容量、快速響 應(yīng)的特點(diǎn),類(lèi)似的海量存儲(chǔ)系統(tǒng)也都可以用于作為存儲(chǔ)模塊,例如HyperTable( -種以C語(yǔ) 言開(kāi)發(fā)的分布式列存儲(chǔ)結(jié)構(gòu)的大容量數(shù)據(jù)存儲(chǔ)系統(tǒng)),從存儲(chǔ)的角度看,現(xiàn)有方案是將數(shù)據(jù) 表存儲(chǔ)于低速存儲(chǔ)介質(zhì)(如SATA盤(pán))用于存儲(chǔ)完整數(shù)據(jù);對(duì)數(shù)據(jù)表的不同索引分別形成索 引表,存儲(chǔ)于SATA硬盤(pán),并且索引表按照業(yè)務(wù)需求冗余過(guò)濾列。查詢(xún)處理模塊收到客戶(hù)端 下發(fā)的查詢(xún)請(qǐng)求,從查詢(xún)請(qǐng)求中獲取查詢(xún)條件,檢查查詢(xún)條件是否含有非法條件、錯(cuò)誤條件 等。如果查詢(xún)條件合法,則將該查詢(xún)條件發(fā)給查詢(xún)執(zhí)行引擎;如果查詢(xún)條件非法,則將錯(cuò)誤 信息返回給客戶(hù)端。查詢(xún)執(zhí)行引擎收到合法的查詢(xún)條件時(shí),根據(jù)合法的查詢(xún)條件找出可查 的數(shù)據(jù)表或索引表,然后將合法的查詢(xún)條件轉(zhuǎn)換為HBase可處理的查詢(xún)請(qǐng)求,執(zhí)行查詢(xún)。
[0003] 現(xiàn)有的二級(jí)索引存儲(chǔ)、查詢(xún)方案需要在數(shù)據(jù)表的每個(gè)索引表中冗余過(guò)濾列,數(shù)據(jù) 冗余較大;進(jìn)行查詢(xún)時(shí),如果索引表未包含查詢(xún)條件中所有的過(guò)濾條件,則該索引表不可 查,如果所有的索引表都不可查,則需要使用查詢(xún)條件構(gòu)造過(guò)濾器,對(duì)數(shù)據(jù)表進(jìn)行全表掃 描,效率極低。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的是克服現(xiàn)有技術(shù)存在的缺陷,提供一種提高查詢(xún)效率的HBase二級(jí) 索引存儲(chǔ)和查詢(xún)系統(tǒng)及其查詢(xún)方法。
[0005] 實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案是:HBase二級(jí)索引存儲(chǔ)和查詢(xún)系統(tǒng),包括客戶(hù)端、查 詢(xún)處理模塊、查詢(xún)執(zhí)行引擎模塊和HBase存儲(chǔ)模塊,查詢(xún)處理模塊收到客戶(hù)端下發(fā)的查詢(xún) 請(qǐng)求,查詢(xún)處理模塊從查詢(xún)請(qǐng)求中獲取查詢(xún)條件,查詢(xún)處理模塊將合法的查詢(xún)條件發(fā)送給 查詢(xún)執(zhí)行引擎模塊,查詢(xún)執(zhí)行引擎模塊匹配查詢(xún)條件,從HBase存儲(chǔ)模塊中找出滿(mǎn)足要求 的數(shù)據(jù),HBase存儲(chǔ)模塊分別存儲(chǔ)索引表和數(shù)據(jù)表,索引表存儲(chǔ)在SATA硬盤(pán)上,數(shù)據(jù)表存儲(chǔ) 在SSD固態(tài)硬盤(pán)上。
[0006] 作為本發(fā)明的優(yōu)化方案,查詢(xún)執(zhí)行引擎模塊包括匹配模塊和查詢(xún)模塊,匹配模塊 用于找出合法的查詢(xún)條件需要查詢(xún)的索引表或數(shù)據(jù)表,查詢(xún)模塊用于在匹配模塊匹配成功 后,將合法的查詢(xún)條件轉(zhuǎn)換為HBase存儲(chǔ)模塊可以處理的查詢(xún)條件并執(zhí)行查詢(xún)過(guò)程。
[0007] -種利用HBase二級(jí)索引存儲(chǔ)和查詢(xún)系統(tǒng)進(jìn)行查詢(xún)的方法,包括如下步驟:
[0008] 1)查詢(xún)處理模塊接收客戶(hù)端下發(fā)的查詢(xún)請(qǐng)求;
[0009] 2)查詢(xún)處理模塊從查詢(xún)請(qǐng)求中獲取查詢(xún)條件,查詢(xún)處理模塊將合法的查詢(xún)條件發(fā) 送給查詢(xún)執(zhí)行引擎模塊進(jìn)行處理;
[0010] 3)查詢(xún)執(zhí)行引擎模塊將合法的查詢(xún)條件與索引表的rowkey匹配,判斷是否能匹 配到索引表;
[0011] 4)查詢(xún)執(zhí)行引擎模塊匹配到索引表,然后查詢(xún)執(zhí)行引擎模塊判斷索引表中是否包 含與合法的查詢(xún)條件對(duì)應(yīng)的所有的過(guò)濾條件;
[0012] 5)索引表中未包含與合法的查詢(xún)條件對(duì)應(yīng)的所有的過(guò)濾條件,使用索引表的列構(gòu) 造過(guò)濾器,對(duì)索引表進(jìn)行scan,得到數(shù)據(jù)表的rowkey;
[0013] 6)使用合法的查詢(xún)條件構(gòu)造過(guò)濾器,使用步驟5)得到的rowkey對(duì)數(shù)據(jù)表進(jìn)行精 確get;
[0014] 7)返回查詢(xún)結(jié)果給客戶(hù)端。
[0015] 作為本發(fā)明的優(yōu)化方案,索引表中包含與合法的查詢(xún)條件對(duì)應(yīng)的所有的過(guò)濾條 件,使用合法的查詢(xún)條件構(gòu)造過(guò)濾器,對(duì)索引表進(jìn)行scan,獲取數(shù)據(jù)表的rowkey,使用得到 的rowkey對(duì)數(shù)據(jù)表進(jìn)行精確get。
[0016] 本發(fā)明具有積極的效果:(1)本發(fā)明將數(shù)據(jù)表存儲(chǔ)在SSD固態(tài)硬盤(pán),相較于傳統(tǒng)的 SATA硬盤(pán),數(shù)據(jù)讀寫(xiě)速度快,大大的提高了查詢(xún)效率;
[0017] (2)現(xiàn)有方案中,當(dāng)查詢(xún)條件和索引表的rowkey匹配,但是索引表未包含全部的 過(guò)濾條件時(shí),需要對(duì)數(shù)據(jù)表進(jìn)行全表掃描,效率較低,本發(fā)明優(yōu)化了匹配邏輯,當(dāng)出現(xiàn)這樣 的情況時(shí),可以使用索引表中包含的過(guò)濾列條件作為過(guò)濾器,對(duì)索引表進(jìn)行scan,得到數(shù)據(jù) 表的rowkey;再使用查詢(xún)條件作為過(guò)濾器,使用rowkey對(duì)數(shù)據(jù)表進(jìn)行精確get,得到查詢(xún)結(jié) 果,減少了對(duì)數(shù)據(jù)表的全表掃描,大大提高了查詢(xún)效率。
【附圖說(shuō)明】
[0018] 為了使本發(fā)明的內(nèi)容更容易被清楚地理解,下面根據(jù)具體實(shí)施例并結(jié)合附圖,對(duì) 本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明,其中:
[0019] 圖1是本發(fā)明的原理框圖;
[0020] 圖2是本發(fā)明查詢(xún)方法的流程圖;
[0021] 圖3是本發(fā)明現(xiàn)有技術(shù)的原理框圖。
[0022] 其中,1、客戶(hù)端,2、查詢(xún)處理模塊,3、查詢(xún)執(zhí)行引擎模塊,4、HBase存儲(chǔ)模塊,31、匹 配模塊,32、查詢(xún)模塊,41、索引表,42、數(shù)據(jù)表。
【具體實(shí)施方式】
[0023]如圖1所示,本發(fā)明公開(kāi)了HBase二級(jí)索引存儲(chǔ)和查詢(xún)系統(tǒng),包括客戶(hù)端1、查詢(xún)處 理模塊2、查詢(xún)執(zhí)行引擎模塊3和HBase存儲(chǔ)模塊4,查詢(xún)處理模塊2收到客戶(hù)端1下發(fā)的 查詢(xún)請(qǐng)求,查詢(xún)處理模塊2從查詢(xún)請(qǐng)求中獲取查詢(xún)條件,查詢(xún)處理模塊2將合法的查詢(xún)條件 發(fā)送給查詢(xún)執(zhí)行引擎模塊3,查詢(xún)執(zhí)行引擎模塊3匹配查詢(xún)條件,從HBase存儲(chǔ)模塊4找出 滿(mǎn)足要求的數(shù)據(jù),HBase存儲(chǔ)模塊4分別存儲(chǔ)索引表41和數(shù)據(jù)表42,索引表41存儲(chǔ)在SATA 硬盤(pán)上,數(shù)據(jù)表42存儲(chǔ)在SSD固態(tài)硬盤(pán)上。如果需要對(duì)數(shù)據(jù)表42進(jìn)行全表掃描的話,將數(shù) 據(jù)表42存儲(chǔ)在SSD固態(tài)硬盤(pán)極大的提高了數(shù)據(jù)表42查詢(xún)的效率。
[0024] 其中,查詢(xún)執(zhí)行引擎模塊3包括匹配模塊31和查詢(xún)模塊32,匹配模塊31用于找出 合法的查詢(xún)條件需要查詢(xún)的索引表41或數(shù)據(jù)表42,查詢(xún)模塊32用于在匹配模塊31匹配成 功后,將合法的查詢(xún)條件轉(zhuǎn)換為HBase存儲(chǔ)模塊4可以處理的查詢(xún)條件并執(zhí)行查詢(xún)過(guò)程。
[0025] 如圖2所示是使用HBase二級(jí)索引存儲(chǔ)和查詢(xún)系統(tǒng)進(jìn)行查詢(xún)的方法流程圖,該方 法包括如下步驟:
[0026] 1)查詢(xún)處理模塊2接收客戶(hù)端1下發(fā)的查詢(xún)請(qǐng)求;
[0027] 2)查詢(xún)處理模塊2從查詢(xún)請(qǐng)求中獲取查詢(xún)條件,查詢(xún)處理模塊2將合法的查詢(xún)條 件發(fā)送給查詢(xún)執(zhí)行引擎模塊3進(jìn)行處理;
[