国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法及裝置與流程

      文檔序號:12597923閱讀:462來源:國知局
      本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法及裝置。
      背景技術(shù)
      ::Hadoop是一種由Apache基金會主導(dǎo)開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),是目前世界上使用最為廣泛的開源分布式系統(tǒng)平臺,其生態(tài)環(huán)境內(nèi)包含多種基礎(chǔ)組件,如HDFS、HBase、MapReduce、ZooKeeper、Hive等。HBase是ApacheHadoop的數(shù)據(jù)庫,能夠?qū)A繑?shù)據(jù)提供隨機(jī)、實時的讀寫訪問。HBase的目標(biāo)是存儲并處理海量數(shù)據(jù),是一個高可靠、高性能、列存儲、可伸縮、實時讀寫的分布式數(shù)據(jù)庫,通過橫向擴(kuò)展增加廉價的PC服務(wù)器,可以不斷增加計算和存儲能力。訪問HBase數(shù)據(jù)的方法是由業(yè)務(wù)層中執(zhí)行業(yè)務(wù)邏輯的業(yè)務(wù)組件向業(yè)務(wù)層中的數(shù)據(jù)查詢模塊發(fā)送數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢模塊調(diào)用HBase的數(shù)據(jù)接口來訪問HBase的持久化數(shù)據(jù),訪問效率較高,但是這種方式中所述數(shù)據(jù)查詢模塊位于業(yè)務(wù)層,導(dǎo)致一個數(shù)據(jù)查詢模塊只適用于一種業(yè)務(wù)組件或少數(shù)幾種業(yè)務(wù)組件,若要增加業(yè)務(wù)組件,則需要增加相應(yīng)的數(shù)據(jù)查詢模塊,增加開發(fā)成本,降低開發(fā)效率。技術(shù)實現(xiàn)要素:為了解決現(xiàn)有技術(shù)存在的技術(shù)問題,本發(fā)明提供一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法及裝置,以實現(xiàn)數(shù)據(jù)查詢與業(yè)務(wù)層的解耦,提高開發(fā)效率,降低開發(fā)成本。本發(fā)明提供一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法,所述方法包括:接收來自客戶端的數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求中包括行鍵查詢字段、預(yù)設(shè)返回條數(shù)和領(lǐng)域?qū)ο竺Q;根據(jù)所述領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托薪∩梢?guī)則;根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,所述行鍵查詢范圍包括起始行鍵和結(jié)束行鍵;調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲得預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù);將所述預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)映射為預(yù)設(shè)格式,并將映射后的數(shù)據(jù)發(fā)送至所述客戶端。優(yōu)選的,所述根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍包括:將所述行鍵查詢字段進(jìn)行處理,以使所述行鍵查詢字段符合所述行鍵生成規(guī)則;根據(jù)處理后的行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍。優(yōu)選的,所述數(shù)據(jù)查詢請求中還包括過濾查詢字段,所述領(lǐng)域?qū)ο笈渲梦募羞€包括過濾器生成規(guī)則,所述方法還包括:根據(jù)所述過濾查詢字段以及所述過濾器生成規(guī)則生成對應(yīng)的過濾器;所述從所述行鍵查詢范圍中獲得預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)包括:利用所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾,得到過濾數(shù)據(jù);從所述過濾數(shù)據(jù)中提取預(yù)設(shè)返回條數(shù)的數(shù)據(jù)。優(yōu)選的,所述過濾查詢字段包括行鍵過濾字段;所述利用所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾包括:利用所述過濾器從所述行鍵查詢范圍內(nèi)的行鍵中過濾出與所述行鍵過濾字段匹配的行鍵。優(yōu)選的,所述過濾查詢字段包括列相關(guān)過濾字段;所述利用所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾包括:利用所述過濾器從所述行鍵查詢范圍內(nèi)過濾出與所述列相關(guān)過濾字段匹配的數(shù)據(jù)。優(yōu)選的,在根據(jù)所述過濾查詢字段以及所述過濾器生成規(guī)則生成對應(yīng)的過濾器之前,所述方法還包括:對所述過濾查詢字段進(jìn)行處理,以使所述過濾查詢字段滿足所述過濾器的生成要求。本發(fā)明實施例還提供了一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢裝置,所述裝置包括:請求接收單元、配置文件確定單元、范圍生成單元、數(shù)據(jù)獲取單元和映射單元;其中,所述請求接收單元,用于接收來自客戶端的數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求中包括行鍵查詢字段、預(yù)設(shè)返回條數(shù)和領(lǐng)域?qū)ο竺Q;所述配置文件確定單元,用于根據(jù)所述領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托薪∩梢?guī)則;所述范圍生成單元,用于根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,所述行鍵查詢范圍包括起始行鍵和結(jié)束行鍵;所述數(shù)據(jù)獲取單元,用于調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲得預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù);所述映射單元,用于將所述預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)映射為預(yù)設(shè)格式,并將映射后的數(shù)據(jù)發(fā)送至所述客戶端。優(yōu)選的,所述數(shù)據(jù)查詢請求中還包括過濾查詢字段;所述領(lǐng)域?qū)ο笈渲梦募羞€包括過濾器生成規(guī)則;所述裝置還包括:過濾器生成單元,用于根據(jù)所述過濾查詢字段以及所述過濾器生成規(guī)則生成對應(yīng)的過濾器;所述數(shù)據(jù)獲取單元,具體用于:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并利用所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾,得到過濾數(shù)據(jù),以及從所述過濾數(shù)據(jù)中提取預(yù)設(shè)返回條數(shù)的數(shù)據(jù)。優(yōu)選的,所述過濾查詢字段包括行鍵過濾字段;所述數(shù)據(jù)獲取單元,具體用于:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并利用所述過濾器從所述行鍵查詢范圍內(nèi)的行鍵中過濾出與所述行鍵過濾字段匹配的行鍵,以及從所述過濾出的行鍵中提取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)。優(yōu)選的,所述過濾查詢字段包括列相關(guān)過濾字段;所述數(shù)據(jù)獲取單元,具體用于:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,利用所述過濾器從所述行鍵查詢范圍內(nèi)過濾出與所述列相關(guān)過濾字段匹配的數(shù)據(jù),得到過濾數(shù)據(jù),以及從所述過濾數(shù)據(jù)中提取預(yù)設(shè)返回條數(shù)的數(shù)據(jù)。本發(fā)明通過HBase訪問對象來實現(xiàn)應(yīng)用層與數(shù)據(jù)持久層的解耦,首先HBase訪問對象接收來自客戶端的數(shù)據(jù)查詢請求,并根據(jù)所述數(shù)據(jù)查詢請求中的領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托薪∩梢?guī)則,根據(jù)所述數(shù)據(jù)查詢請求中的所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,然后調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù),最后將所述數(shù)據(jù)映射為預(yù)設(shè)格式,并將預(yù)設(shè)格式的數(shù)據(jù)發(fā)送至所述客戶端。由于應(yīng)用層與HAO解耦,使得HAO能夠適用于任何應(yīng)用層的業(yè)務(wù)組件,當(dāng)業(yè)務(wù)組件增加或變更時,所述HAO無需做改動,就可以實現(xiàn)查詢所述HBase數(shù)據(jù)庫的功能,降低開發(fā)成本,提高開發(fā)效率。附圖說明為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。圖1為本發(fā)明實施例一提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法的流程圖;圖2為本發(fā)明實施例二提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法的流程圖;圖3為本發(fā)明實施例二提供的領(lǐng)域?qū)ο竽P偷氖疽鈭D;圖4為本發(fā)明實施例四提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢裝置的結(jié)構(gòu)框圖。具體實施方式傳統(tǒng)的訪問HBase數(shù)據(jù)的方法是由業(yè)務(wù)層中執(zhí)行業(yè)務(wù)邏輯的業(yè)務(wù)組件向業(yè)務(wù)層中的數(shù)據(jù)查詢模塊發(fā)送數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢模塊調(diào)用HBase的數(shù)據(jù)接口來訪問HBase的持久化數(shù)據(jù),由于所述數(shù)據(jù)查詢模塊位于業(yè)務(wù)層,導(dǎo)致一個數(shù)據(jù)查詢模塊只適用于一種業(yè)務(wù)組件或少數(shù)幾種業(yè)務(wù)組件,若要增加業(yè)務(wù)組件,則需要增加相應(yīng)的數(shù)據(jù)查詢模塊,增加開發(fā)成本,降低開發(fā)效率。為了克服該技術(shù)問題,本發(fā)明提供了一種基于HBase數(shù)據(jù)庫的通用訪問框架——HBase訪問對象(HBaseAccessObject,簡稱HAO),所述HAO與業(yè)務(wù)層分離,業(yè)務(wù)組件通過所述HAO來調(diào)用HBase的數(shù)據(jù)接口查詢數(shù)據(jù),也就是說,所述HAO可以適用于任何業(yè)務(wù)組件,實現(xiàn)了數(shù)據(jù)查詢與業(yè)務(wù)層解耦,降低了開發(fā)成本,提高了開發(fā)效率。為了使本
      技術(shù)領(lǐng)域
      :的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。在介紹本發(fā)明提供的實施例之前,首先介紹一下HBase數(shù)據(jù)庫的結(jié)構(gòu):HBase數(shù)據(jù)庫以表的形式存儲數(shù)據(jù),表包括行(row)、列(column)和時間戳(Timestamp)。一行記錄由若干列組成,其中的某些列又可以構(gòu)成一個列族(columnfamily)。行健(rowkey)是用來檢索一行記錄的主鍵,是行的唯一標(biāo)識,行健可以是任意字符串(最大長度是64KB,實際應(yīng)用中長度一般為(10-100bytes),在HBase內(nèi)部,rowkey保存為字節(jié)數(shù)組,存儲時,數(shù)據(jù)按照rowkey的字典順序(byteorder)排序存儲。時間戳,默認(rèn)由系統(tǒng)指定,用戶也可以顯示設(shè)置。不同的時間戳用來區(qū)分不同的版本,時間戳一般按照版本從新到舊的順序進(jìn)行排列,在數(shù)據(jù)讀取的時候優(yōu)先讀取最新版本。舉例而言,表1為一個可視化的HBase表。表1其中,R1和R2為兩個行鍵,每個行鍵包括兩列,列名分別為URI和Parser,這兩列屬于同一個列族。T3、T2和T1分別表示第三版本、第二版本和第一版本,第三版本是最新的,第一版本是最舊的。實施例一:參見圖1,該圖為本發(fā)明實施例一提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法的流程圖。本實施例提供的基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法包括如下步驟:步驟S101:接收來自客戶端的數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求中包括行鍵查詢字段、預(yù)設(shè)返回條數(shù)和領(lǐng)域?qū)ο竺Q。通常情況下,所述數(shù)據(jù)查詢請求來自業(yè)務(wù)組件,即應(yīng)用層,從硬件實現(xiàn)的角度來說,所述數(shù)據(jù)查詢請求的發(fā)起方是客戶端,接收方一般為服務(wù)器。例如,客戶通過農(nóng)行的客戶端發(fā)起查詢2016年1月至2016年6月的信用卡交易記錄的數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求被農(nóng)行的服務(wù)器接收到。步驟S102:根據(jù)所述領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托墟I生成規(guī)則。本實施例的HAO抽象出“領(lǐng)域?qū)ο蟆蹦P停脕砻枋雒總€數(shù)據(jù)類型具體的存儲特點和訪問特點。HBase訪問對象基于領(lǐng)域類型實現(xiàn)數(shù)據(jù)訪問邏輯,做到與具體數(shù)據(jù)類型的解耦,將數(shù)據(jù)類型的個性特點及變化都封裝在領(lǐng)域類型中,從而實現(xiàn)并保證通用HBase訪問對象接口的相對穩(wěn)定。在本實施例中,所述數(shù)據(jù)查詢請求中包括領(lǐng)域?qū)ο竺Q,所述領(lǐng)域?qū)ο竺Q用于查找對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募写鎯τ蠬Base數(shù)據(jù)庫的表名和行鍵生成規(guī)則,所述表名用于查找所述HBase數(shù)據(jù)庫中對應(yīng)的表,所述行鍵生成規(guī)則用于生成行鍵查詢范圍。在實際應(yīng)用中可以按照一定的規(guī)則設(shè)置有多個領(lǐng)域?qū)ο笈渲梦募绨凑彰總€表對應(yīng)一個領(lǐng)域?qū)ο笈渲梦募?,或者具有共性的多個表對應(yīng)一個領(lǐng)域?qū)ο笈渲梦募?。所述領(lǐng)域?qū)ο笈渲梦募梢允荴ML文件等。步驟S103:根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,所述行鍵查詢范圍包括起始行鍵和結(jié)束行鍵。在本實施例中,所述數(shù)據(jù)查詢請求中還包括行鍵查詢字段,即本實施例以行健為單位查詢所述HBase數(shù)據(jù)庫,由于行鍵一般是按照字典順序進(jìn)行排列的,因此只要確定起始行鍵(startkey)和結(jié)束行鍵(endkey),就可以調(diào)用HBase的數(shù)據(jù)接口,獲取到從所述起始行鍵到所述結(jié)束行鍵之間的所有行鍵(可以包括所述起始行鍵和所述結(jié)束行鍵)對應(yīng)的數(shù)據(jù)。在本實施例中,所述起始行鍵和所述結(jié)束行鍵構(gòu)成行鍵查詢范圍。若查詢多行記錄,則起始行鍵和結(jié)束行鍵為兩個不同的行鍵;若只查詢一行記錄,則起始行鍵和結(jié)束行鍵為兩個相同的行鍵,或合并為一個行健。為了確定所述行鍵查詢范圍,在本實施例中,所述數(shù)據(jù)查詢請求中包括行健查詢字段,所述行鍵查詢字段用于生成所述行鍵查詢范圍,具體的,根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍。行鍵生成規(guī)則不同,根據(jù)行鍵查詢字段生成的起始行鍵和結(jié)束行鍵也不同。如果行鍵查詢字段不符合行鍵生成規(guī)則,則需要預(yù)先對所述行鍵查詢字段進(jìn)行處理。常用的行鍵字符串包括以下幾種類型:純數(shù)字字符串、數(shù)字+特殊分隔符、數(shù)字+英文字母,和數(shù)字+英文字母+特殊分隔符。假設(shè)行鍵查詢字段包括北京、起始日期20140512、結(jié)束日期20140720,表2為根據(jù)不同的行鍵生成規(guī)則生成的不同的行鍵查詢范圍。表2在該例子中,對所述行鍵查詢字段進(jìn)行的處理為將“北京”按照不同的行鍵生成規(guī)則進(jìn)行變換,若所述行鍵字符串類型為純數(shù)字字符串或數(shù)字+特殊分隔符,則將“北京”處理為數(shù)字“010”;若所述行鍵字符串類型為數(shù)字+英文字母或數(shù)字+英文字母+特殊分隔符,則將“北京”處理為字母“Beijing”。對所述行鍵查詢字段的處理手段除了進(jìn)行變換,在實際應(yīng)用中,還可以包括校驗、翻轉(zhuǎn)、補齊等,本發(fā)明不做具體限定。其中,校驗是指對所述行鍵查詢字段做長度、類型之類的校驗,比如校驗?zāi)硞€字段的值是不是整數(shù),是不是滿足長度為10位等等。翻轉(zhuǎn)是為了對所述行鍵查詢字段做降序排列,例如日期,使用“99999999-某個日期值”來對字段進(jìn)行處理,這樣可以翻轉(zhuǎn)日期的排序,保證日期靠后的排序在前面,即按降序來排列(例如兩個日期20160726和20160701按正常順序是前者排在后面,后者排在前面,對該值進(jìn)行翻轉(zhuǎn)處理,即99999999-20160726和99999999-20160701后,99999999-20160726小于99999999-20160701,使得99999999-20160726排在了99999999-20160701的前面,產(chǎn)生了降序排序的效果)。補齊是指對字段的位數(shù)進(jìn)行補齊,例如如果字段位數(shù)不足20位,則在字段的左邊用0補齊。需要注意的是,由于HBase數(shù)據(jù)庫中行健是按照由小到大的順序排列的,所以要保證生成的起始行鍵小于結(jié)束行鍵。上述對所述行鍵查詢字段的處理可以通過所述領(lǐng)域?qū)ο笈渲梦募M(jìn)行實現(xiàn),這樣就可以靈活的實現(xiàn)對處理參數(shù)以及處理方式的設(shè)定。而且為了增強(qiáng)適應(yīng)性和擴(kuò)展性,校驗和變換還支持自定義函數(shù),通過這種方式可以靈活地為指定數(shù)據(jù)配置特殊的校驗函數(shù)和變換函數(shù)。步驟S104:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)。通常情況下,客戶端需要按頁整合數(shù)據(jù),每頁最多可以容納N條數(shù)據(jù),那么可以將預(yù)設(shè)返回條數(shù)設(shè)置為N條,若所述行鍵查詢范圍對應(yīng)的行鍵的條數(shù)多于N條,則以預(yù)設(shè)返回條數(shù)為單位分多次提取數(shù)據(jù),并將每次提取出來的數(shù)據(jù)發(fā)送給客戶端;若所述行鍵查詢范圍對應(yīng)的行鍵的條數(shù)少于N條,則一次性都提取出來,發(fā)送給客戶端。步驟S105:將所述預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)映射為預(yù)設(shè)格式,并將映射后的數(shù)據(jù)發(fā)送至所述客戶端。在實際應(yīng)用中,在將所述獲取到的數(shù)據(jù)發(fā)送至所述客戶端之前,可以先對所述數(shù)據(jù)進(jìn)行映射,映射為客戶端需要的預(yù)設(shè)格式,然后再將映射后的預(yù)設(shè)格式的數(shù)據(jù)發(fā)送至所述客戶端,以滿足適應(yīng)不同客戶端的需求。本實施通過HBase訪問對象來實現(xiàn)應(yīng)用層與數(shù)據(jù)持久層的解耦,首先HBase訪問對象接收來自客戶端的數(shù)據(jù)查詢請求,并根據(jù)所述數(shù)據(jù)查詢請求中的領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托薪∩梢?guī)則,根據(jù)所述數(shù)據(jù)查詢請求中的所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,然后調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù),最后將所述數(shù)據(jù)映射為預(yù)設(shè)格式,并將預(yù)設(shè)格式的數(shù)據(jù)發(fā)送至所述客戶端。由于應(yīng)用層與HAO解耦,使得HAO能夠適用于任何應(yīng)用層的業(yè)務(wù)組件,當(dāng)業(yè)務(wù)組件增加或變更時,所述HAO無需做改動,就可以實現(xiàn)查詢所述HBase數(shù)據(jù)庫的功能,降低開發(fā)成本,提高開發(fā)效率。實施例二所述實施例一根據(jù)起始行鍵和結(jié)束行鍵來從所述HBase數(shù)據(jù)庫中提取數(shù)據(jù),由于一個行鍵對應(yīng)一整條記錄,在實際應(yīng)用中,這樣的數(shù)據(jù)提取可能比較粗糙,通過本實施例能夠?qū)崿F(xiàn)更加準(zhǔn)確的在從行鍵查詢范圍中提取出用戶需要的數(shù)據(jù)的目的。參見圖2,該圖為本發(fā)明實施例二提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法的流程圖。本實施例提供的基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法包括如下步驟:步驟S201:接收來自客戶端的數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求中包括行鍵查詢字段、預(yù)設(shè)返回條數(shù)、領(lǐng)域?qū)ο竺Q和過濾查詢字段。在實際應(yīng)用中,所述過濾查詢字段可以包括行鍵過濾字段、列相關(guān)過濾字段等。所述行鍵過濾字段是指從行鍵查詢范圍內(nèi)的行鍵中過濾出需要的行鍵。例如所述行鍵過濾字段為“01”,用于將最后兩個字符為“01”的行鍵過濾出來。所述列相關(guān)過濾字段用于從HBase數(shù)據(jù)庫中列對應(yīng)的數(shù)據(jù),在行鍵查詢字段存在的情況下,所述列相關(guān)過濾字段具體用于從所述行鍵查詢范圍中過濾出與列相關(guān)的的數(shù)據(jù)。以所述表1為例,所述列相關(guān)過濾字段包括列族,即列名URI和Paser對應(yīng)的列族。進(jìn)一步的,所述過濾查詢字段還可以包括列名過濾字段,用于從所述列族對應(yīng)的數(shù)據(jù)中過濾出某個或某些列名對應(yīng)的數(shù)據(jù),例如所述URI或所述Paser對應(yīng)的數(shù)據(jù)。再進(jìn)一步,所述過濾查詢字段中還可以包括列值過濾字段,即從列(例如所述URI或所述Paser)中過濾出來與所述列值匹配的數(shù)據(jù)。所述列相關(guān)過濾字段還可以包括列值,用于過濾出與所述列值的數(shù)據(jù)。步驟S202:根據(jù)所述領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻⑿薪∩梢?guī)則以及過濾器的生成規(guī)則。步驟S203:根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,所述行鍵查詢范圍包括起始行鍵和結(jié)束行鍵。步驟S204:根據(jù)所述過濾查詢字段以及所述過濾器生成規(guī)則生成對應(yīng)的過濾器。在接收到包含所述過濾查詢字段的數(shù)據(jù)查詢請求后,根據(jù)所述過濾查詢字段以及所述過濾器生成規(guī)則生成對應(yīng)的過濾器。具體的,首先根據(jù)所述過濾查詢字段對過濾器的配置文件中過濾器的屬性進(jìn)行參數(shù)設(shè)置,然后通過JAVA反射機(jī)制動態(tài)創(chuàng)建過濾器。為了實現(xiàn)自動對配置文件進(jìn)行設(shè)置,可以對所述過濾查詢字段預(yù)先進(jìn)行處理,以使其符合配置文件對參數(shù)的要求,所述處理過程可以包括變換、補齊、翻轉(zhuǎn)等,與實施例一中的處理規(guī)則相類似,此處不再贅述。在過濾器創(chuàng)建的過程中,還可以利用HBase自帶的比較器來實現(xiàn)查詢某個范圍的功能,例如從第m列到第n列。步驟S205:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,利用所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾,得到過濾數(shù)據(jù),并從所述過濾數(shù)據(jù)中提取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)。步驟S206:將所述預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)映射為預(yù)設(shè)格式,并將映射后的數(shù)據(jù)發(fā)送至所述客戶端。本實施例通過行鍵查詢范圍獲取起始行鍵和結(jié)束行鍵之間的數(shù)據(jù),并通過所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾,以使用戶準(zhǔn)確的得到想要的數(shù)據(jù),滿足用戶的需求。在實際應(yīng)用中,可以建立領(lǐng)域?qū)ο竽P?,來查找不同類型的?shù)據(jù),具體可以采用XML配置文件來定義和描述領(lǐng)域?qū)ο?,領(lǐng)域?qū)ο蟀I(lǐng)域類型信息domainType、輸出類名稱outputClass、HBase表中rowkey、過濾器相關(guān)信息filters和HBase表相關(guān)信息tableInfo等元素,每個元素下又包含了若干子元素。HBase訪問對象使用領(lǐng)域?qū)ο蠛洼斎雽ο?,通過調(diào)用HBaseAPI(接口),對HBase訪問操作進(jìn)行封裝,將領(lǐng)域?qū)ο笥成涞较鄳?yīng)的HBase查詢對象中進(jìn)行查詢并得到返回結(jié)果。領(lǐng)域?qū)ο竽P偷氖疽鈭D如圖3所示。其中,domainType領(lǐng)域類型描述子節(jié)點,按順序定義了以下子元素:code領(lǐng)域類型碼,string類型desp領(lǐng)域類型描述,string類型filePath領(lǐng)域類型配置文件路徑,string類型outputClass輸出類描述子節(jié)點,按順序定義了以下子元素:calssName輸出類完全限定名,string類型outputView輸出報文描述子節(jié)點,按順序定義了以下子元素:stringPad補齊操作定義子節(jié)點,按順序定義了以下子元素:userDefineFun用戶自定義函數(shù)子節(jié)點,支持對第三方j(luò)ar包中或者系統(tǒng)中通用處理函數(shù)的調(diào)用,該節(jié)點定義了以下子元素:className自定義處理函數(shù)所在類的名稱,string類型methodName自定義處理函數(shù)名,string類型range子節(jié)點按順序定義了以下子元素:isRange范圍字段標(biāo)志,boolean類型userDefineFun自定義處理函數(shù),復(fù)雜類型field字段描述子節(jié)點,定義了以下子元素:name字段名稱,string類型index字段索引,int類型size字段長度,int類型isCon續(xù)查標(biāo)志,boolean類型isRevert字段翻轉(zhuǎn)標(biāo)志,boolean類型stringPad字符補齊方式,復(fù)雜類型,參見stringPadrange字段范圍定義,復(fù)雜類型,參見rangecolumnHBase列定義子節(jié)點,按順序定義了以下子元素:loopColumn循環(huán)列定義子節(jié)點,對應(yīng)HBase中列名滿足一定規(guī)則的一批列,其中按順序定義了以下子元素:columnFamily列族定義子節(jié)點,對應(yīng)HBase中的列族,定義了以下子元素:name列族名稱,string類型column列族中包含的列,復(fù)雜類型,參見columnloopColumn列族中包含的循環(huán)列,復(fù)雜類型,參見loopColumntableInfo表定義子節(jié)點,對應(yīng)HBase中的表,定義以下子元素:rowKey行主鍵定義子節(jié)點,對應(yīng)HBase的RowKey,該節(jié)點按順序定義了以下子元素:filterField過濾器字段定義子節(jié)點,包含以下子元素:filters過濾器定義子節(jié)點,按順序定義了以下子元素:本實施例提供的基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法可以通過配置文件來實現(xiàn),下面通過一段代碼作為本實施例的示例:<?xmlversion="1.0"encoding="UTF-8"?>-<Domain><domainType>if40</domainType>-<outputClass><calssName>com.abchina.bhdqs.vo.if40.If40TrcForm</calssName></outputClass>-<tableInfo><tableName>hdqs_if40_trc</tableName>-<columnFamily><name>f</name>-<column><name>dt</name></column></columnFamily></tableInfo>-<rowKey>-<field><name>regIfArSeqNum</name><index>0</index></field>-<field><name>entFnCod</name><index>1</index></field>-<field><name>linePdCod</name><index>2</index></field>-<field><name>pdGrpId</name><index>3</index></field>-<field><name>crtFormTrcDate</name><index>4</index><size>8</size>-<range><isRange>true</isRange></range></field>-<field><name>formTrcSeqNum</name><index>5</index><size>20</size>-<stringPad><type>LEFTPAD</type><value>0</value></stringPad></field></rowKey>-<filters>-<filterField>-<field><name>typFormTrcCod</name><index>0</index></field><isFilterList>Y</isFilterList><filterName>org.apache.hadoop.hbase.filter.SingleColumnValueFilter</filterName><columnFamily>f</columnFamily><column>dt</column><compareOp>EQUAL</compareOp><comparator>org.apache.hadoop.hbase.filter.BinaryPrefixComparator</comparator></filterField>-<filterField>-<field><name>extidTarfIfId</name><index>1</index></field><filterName>org.apache.hadoop.hbase.filter.SingleColumnValueFilter</filterName><columnFamily>f</columnFamily><column>dt</column><compareOp>EQUAL</compareOp><comparator>org.apache.hadoop.hbase.filter.SubstringComparator</comparator></filterField></filters></Domain>基于以上實施例提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢方法,本發(fā)明實施例還提供了一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢裝置,下面結(jié)合附圖來詳細(xì)說明其工作原理。實施例三參見圖4,該圖為本發(fā)明實施例三提供的一種基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢裝置的結(jié)構(gòu)框圖。本實施例提供的基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢裝置包括:請求接收單元101、配置文件確定單元102、范圍生成單元103、數(shù)據(jù)獲取單元104和映射單元105;其中,所述請求接收單元101,用于接收來自客戶端的數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求中包括行鍵查詢字段、預(yù)設(shè)返回條數(shù)和領(lǐng)域?qū)ο竺Q;所述配置文件確定單元102,用于根據(jù)所述領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托薪∩梢?guī)則;所述范圍生成單元103,用于根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,所述行鍵查詢范圍包括起始行鍵和結(jié)束行鍵;所述數(shù)據(jù)獲取單元104,用于調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲得預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù);所述映射單元105,用于將所述預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)映射為預(yù)設(shè)格式,并將映射后的數(shù)據(jù)發(fā)送至所述客戶端。本實施通過HBase訪問對象來實現(xiàn)應(yīng)用層與數(shù)據(jù)持久層的解耦,首先HBase訪問對象接收來自客戶端的數(shù)據(jù)查詢請求,并根據(jù)所述數(shù)據(jù)查詢請求中的領(lǐng)域?qū)ο竺Q確定對應(yīng)的領(lǐng)域?qū)ο笈渲梦募?,所述領(lǐng)域?qū)ο笈渲梦募邪ū砻托薪∩梢?guī)則,根據(jù)所述數(shù)據(jù)查詢請求中的所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,根據(jù)所述行鍵查詢字段以及HBase數(shù)據(jù)庫的行鍵生成規(guī)則生成行鍵查詢范圍,然后調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并從所述行鍵查詢范圍中獲取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù),最后將所述數(shù)據(jù)映射為預(yù)設(shè)格式,并將預(yù)設(shè)格式的數(shù)據(jù)發(fā)送至所述客戶端。由于應(yīng)用層與HAO解耦,使得HAO能夠適用于任何應(yīng)用層的業(yè)務(wù)組件,當(dāng)業(yè)務(wù)組件增加或變更時,所述HAO無需做改動,就可以實現(xiàn)查詢所述HBase數(shù)據(jù)庫的功能,降低開發(fā)成本,提高開發(fā)效率。實施例四基于所述實施例三,在本實施例提供的基于HBase數(shù)據(jù)庫的數(shù)據(jù)查詢裝置中,所述數(shù)據(jù)查詢請求中還包括過濾查詢字段;所述領(lǐng)域?qū)ο笈渲梦募羞€包括過濾器生成規(guī)則;所述裝置還包括:過濾器生成單元,用于根據(jù)所述過濾查詢字段以及所述過濾器生成規(guī)則生成對應(yīng)的過濾器;所述數(shù)據(jù)獲取單元104,具體用于:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并利用所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾,得到過濾數(shù)據(jù),以及從所述過濾數(shù)據(jù)中提取預(yù)設(shè)返回條數(shù)的數(shù)據(jù)。其中,若所述過濾查詢字段包括行鍵過濾字段;則所述數(shù)據(jù)獲取單元104,具體用于:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,并利用所述過濾器從所述行鍵查詢范圍內(nèi)的行鍵中過濾出與所述行鍵過濾字段匹配的行鍵,以及從所述過濾出的行鍵中提取預(yù)設(shè)返回條數(shù)的行鍵對應(yīng)的數(shù)據(jù)。若所述過濾查詢字段包括列相關(guān)過濾字段;所述數(shù)據(jù)獲取單元104,具體用于:調(diào)用HBase的數(shù)據(jù)接口,以從與所述表名對應(yīng)的表內(nèi)查找所述行鍵查詢范圍,利用所述過濾器從所述行鍵查詢范圍內(nèi)過濾出與所述列相關(guān)過濾字段匹配的數(shù)據(jù),得到過濾數(shù)據(jù),以及從所述過濾數(shù)據(jù)中提取預(yù)設(shè)返回條數(shù)的數(shù)據(jù)。本實施例通過行鍵查詢范圍獲取起始行鍵和結(jié)束行鍵之間的數(shù)據(jù),并通過所述過濾器對所述行鍵查詢范圍內(nèi)的數(shù)據(jù)進(jìn)行過濾,以使用戶準(zhǔn)確的得到想要的數(shù)據(jù),滿足用戶的需求。當(dāng)介紹本發(fā)明的各種實施例的元件時,冠詞“一”、“一個”、“這個”和“所述”都意圖表示有一個或多個元件。詞語“包括”、“包含”和“具有”都是包括性的并意味著除了列出的元件之外,還可以有其它元件。需要說明的是,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例中的全部或部分流程,是可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法實施例的流程。其中,所述存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-OnlyMemory,ROM)或隨機(jī)存儲記憶體(RandomAccessMemory,RAM)等。本說明書中的各個實施例均采用遞進(jìn)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元及模塊可以是或者也可以不是物理上分開的。另外,還可以根據(jù)實際的需要選擇其中的部分或者全部單元和模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。以上所述僅是本發(fā)明的具體實施方式,應(yīng)當(dāng)指出,對于本
      技術(shù)領(lǐng)域
      :的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3 
      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1