本發明涉及數據庫
技術領域:
:,具體來說,涉及一種基于內存數據庫的HBase二級索引構建與查詢的裝置及方法。
背景技術:
::隨著信息時代的迅速發展,互聯網應用的不斷深入,使得非結構化的數據規模日益龐大。HBase(HadoopDatabase,Hadoop數據庫)是參照GoogleBigtable實現的開源NoSQL數據庫,它具有強一致性、高性能隨機寫、面向字段且可動態修改、可水平伸縮的特性。HBase是基于Rowkey(行鍵)的有序存儲,對Rowkey支持毫秒級的快速檢索。然而,隨著HBase的應用不斷深入,單一的通過Rowkey檢索數據的方式,不再滿足應用的需求,在實際應用中,需要根據指定字段,或者幾個字段進行組合檢索,這就提出了建立HBase二級索引的需求。由于HBase基于行健有序存儲,在查詢時使用行健十分高效,然后想要實現關系型數據庫那樣可以隨意組合的多條件查詢、查詢總記錄數、分頁等就比較麻煩了。想要實現這樣的功能,一般采用以下兩種方法和裝置:1.第一種方法和裝置是使用HBase提供的過濾器。通過這個過濾器可以在HBase中的數據的多個維度(行,字段,數據版本)上進行對數據的篩選操作。該方法和裝置使用起來很方便,但是局限性也很大,HBase的過濾器是直接掃記錄的,如果數據范圍很大,會導致查詢速度很慢;2.第二種方法和裝置是通過構建二級索引,查詢符合條件的Rowkey,然后再查詢HBase。該方法和裝置適用范圍就比較廣泛,目前的HBase二級索引構建方案主要有以下兩種方案:1)第一種方案是將索引數據單獨存儲為一張表,通過HBase協處理器生成并訪問索引數據;2)第二種方案是將索引數據與源數據存儲在相同的Region(分區)里,索引數據定義為一個單獨的字段族,也是利用協處理器來生成并訪問索引數據。對于第一種方案,源數據表與索引表的數據一致性很難保證,訪問兩張不同的表也會增加IO開銷和遠程調用的次數。對于第二種方案,單表的數據容量會急劇增加,對同一Region里的多個字段族進行拆分或合并等操作時可能會造成數據丟失或不一致。針對相關技術中的問題,目前尚未提出有效的解決方案。技術實現要素:針對相關技術中的上述技術問題,本發明提出一種基于內存數據庫的HBase二級索引構建與查詢的裝置及方法,能夠實現多級查詢的二級索引,索引字段的靈活配置,二級索引快速插入和存儲。為實現上述技術目的,本發明的技術方案是這樣實現的:一種基于內存數據庫的HBase二級索引構建與查詢的裝置,包括:客戶端,其用于發出二級索引規則創建請求、二級索引規則刪除請求、數據更新請求和數據查詢請求;數據處理模塊,其接收客戶端發送的請求,用于對客戶端發出的請求進行分別處理,進行數據的更新、查詢和刪除;二級索引模塊,對客戶端發出的請求進行二級索引的更新、查詢和刪除。進一步的,所述數據處理模塊主要是對HBase中的數據進行處理。進一步的,所述數據處理模塊包括:客戶端接口:用于接收客戶端發送的各種數據請求,將對數據的請求轉移到數據請求處理組件,對索引規則的請求轉移到索引規則組件,接收相應的查詢結果返回到客戶端;數據請求處理組件:用于接收客戶端接口的數據處理請求,在數據庫存儲組件中更新和刪除數據庫的數據,數據更新后,觸發協處理器,進行二級索引的處理;數據存儲組件:主要對數據進行存儲,根據不同的操作及時更新數據;索引規則組件:接收客戶端接口的索引規則請求,包括索引規則的創建和刪除;協處理器組件:在數據請求處理組件在對數據進行處理后觸發該協處理器組件,該該協處理器組件讀取索引規則組件中的索引規則,根據索引規則對二級索引進行處理;二級索引接口:根據協處理組件讀取到的索引規則,將對二級索引的處理轉移到二級索引模塊。進一步的,所述二級索引模塊主要是對二級索引進行處理,包括二級索引查詢、更新和存儲,所述二級索引模塊主要包含:客戶端接口:接收客戶端發送的數據請求,將對數據的查詢請求轉移到二級索引查詢組件,更新請求轉移到二級索引更新組件,接收相應的查詢結果返回到客戶端;二級索引更新組件:接收客戶端接口的更新請求,及時更新二級索引存儲組件中的二級索引;二級索引查詢組件:接收客戶端接口的查詢請求,通過向二級索引存儲組件查詢二級索引獲得Rowkey,將其返回到客戶端接口;二級索引查詢組件:接收客戶端接口的刪除請求,及時刪除二級索引存儲組件中的二級索引;二級索引存儲組件:對二級索引進行存儲;數據處理接口:接收數據處理模塊對二級索引的操作,將回調函數所獲得的數據轉移給二級索引模塊。一種基于內存數據庫的HBase二級索引構建與查詢的方法,包括以下步驟:S1客戶端發送二級索引規則創建請求,協處理器調用二級索引模塊接口,將二級索引信息和二級索引數據寫入二級索引模塊;S2客戶端發送二級索引規則刪除請求,協處理器調用二級索引模塊接口,刪除二級索引規則信息和索引數據;S3客戶端發送數據更新請求,數據處理模塊確定數據更新類型為插入,數據處理模塊將更新數據直接寫入HBase,協處理器調用二級索引模塊接口修改二級索引數據;S4客戶端發送數據更新請求,數據處理模塊確定數據更新類型為修改或刪除,協處理器協助數據處理模塊搜索到需要更新的數據,數據處理模塊更新數據,協處理器調用二級索引模塊接口修改索引數據;S5客戶端發送數據查詢請求,協處理器協助數據處理模塊搜索到需要查詢的數據,數據處理模塊獲取查詢數據并將獲取的數據返回給客戶端。進一步的,步驟S1包括:S11客戶端發送二級索引規則創建請求;S12數據處理模塊接受二級索引規則創建請求,數據請求處理組件將二級索引創建情況分配給協處理器組件進行處理;S13協處理器組件對收到的二級索引創建請求中的表名和字段進行解析;S14協處理器組件根據索引創建請求的解析結果調用二級索引模塊接口寫入索引規則信息,并在二級索引模塊中根據表名和索引字段創建二級索引對應的Key值;S15協處理器組件掃描HBase中索引歸屬的表,將每條記錄的Rowkey和對應索引字段的權值寫入二級索引模塊。進一步的,步驟S2包括:S21客戶端發送二級索引規則刪除請求;S22數據處理模塊接收索引刪除請求,分配給協處理器組件進行處理;S23協處理器組件對收到索引刪除請求中的索引名稱進行解析;S24協處理器組件根據解析結果調用二級索引模塊接口,刪除索引規則信息和索引數據。進一步的,步驟S3包括:S31客戶端發送數據更新請求;S32數據處理模塊接收到數據更新請求后,經判斷,確定數據更新類型為插入,將更新數據直接寫入HBase,并將數據更新請求轉發給協處理器;S33協處理器判斷更新字段是否為索引字段,若數據更新字段是索引字段,協處理器調用二級索引模塊更新索引數據;若數據更新字段不是索引字段,數據更新結束。進一步的,步驟S4包括:S41客戶端發送數據更新請求;S42數據處理模塊接收到數據更新請求后,經判斷,確定數據更新類型為修改或刪除,并將數據更新請求轉發給協處理器;S43協處理器判斷更新條件是否為索引字段,若更新條件為索引字段,協處理器遍歷HBase,獲取符合條件的Rowkey;若更新條件不為索引字段,協處理器將更新條件提交給二級索引模塊,二級索引模塊根據不同的更新條件進行精確、范圍或組合查詢,返回符合條件的Rowkey;S44協處理器將二級索引模塊返回的Rowkey返回給數據處理模塊,數據處理模塊根據協處理器返回的Rowkey更新數據;S45協處理器判斷更新字段是否為索引字段,若數據更新字段是索引字段,協處理器調用二級索引模塊更新索引數據;若數據更新字段不是索引字段,數據更新結束。進一步的,步驟S5包括:S51客戶端發送數據查詢請求;S52數據處理模塊接收到數據查詢請求后,將數據查詢請求轉發給協處理器;S53協處理器判斷更新條件是否為索引字段,若更新條件為索引字段,協處理器遍歷HBase,獲取符合條件的Rowkey;若更新條件不為索引字段,協處理器將查詢條件提交給二級索引模塊,二級索引模塊根據不同的查詢條件進行精確、范圍或組合查詢,返回符合條件的Rowkey;S54協處理器將二級索引模塊返回的Rowkey返回給數據處理模塊;S55數據處理模塊根據協處理器返回的Rowkey獲取數據,并將數據返回給客戶端。本發明的有益效果:1)實現多表對應一個協處理器的機制;可對索引字段進行靈活配置,以滿足多級查詢粒度的需求;2)實現基于內存數據庫連接池的二級索引快速插入機制;當客戶端向HBase中更新數據時,觸發協處理器,根據操作的當前表的索引規則在內存數據庫中創建二級索引,通過使用內存數據庫連接池,可減少由于不斷創建新連接的開銷,快速構建相應的二級索引;3)實現基于內存數據庫的二級索引存儲機制;對HBase數據表生成的二級索引存儲在內存數據庫,當客戶端發出查詢或者刪除請求時,可以快速查詢二級索引,大幅提升訪問效率;4)實現支持多級查詢粒度的二級索引。附圖說明為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1是根據本發明實施例所述的基于內存數據庫的HBase二級索引構建與查詢的裝置組成結構示意圖;圖2是根據本發明實施例所述的數據處理模塊的結構示意圖;圖3是根據本發明實施例所述的二級索引模塊的結構示意圖;圖4是根據本發明實施例的二級索引規則構建流程圖;圖5是根據本發明實施例的二級索引規則刪除流程圖;圖6是根據本發明實施例的數據更新流程圖;圖7是根據本發明實施例的數據查詢流程圖。具體實施方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員所獲得的所有其他實施例,都屬于本發明保護的范圍。如圖1-7所示,根據本發明實施例所述的一種基于內存數據庫的HBase二級索引構建與查詢的裝置,包括:客戶端,其用于發出二級索引規則創建請求、二級索引規則刪除請求、數據更新請求和數據查詢請求;數據處理模塊,其接收客戶端發送的請求,用于對客戶端發出的請求進行分別處理,進行數據的更新、查詢和刪除;二級索引模塊,對客戶端發出的請求進行二級索引的更新、查詢和刪除。其中,所述數據處理模塊主要是對HBase中的數據進行處理。其中,所述數據處理模塊包括:客戶端接口:用于接收客戶端發送的各種數據請求,將對數據的請求轉移到數據請求處理組件,對索引規則的請求轉移到索引規則組件,接收相應的查詢結果返回到客戶端;數據請求處理組件:用于接收客戶端接口的數據處理請求,在數據庫存儲組件中更新和刪除數據庫的數據,數據更新后,觸發協處理器,進行二級索引的處理;數據存儲組件:主要對數據進行存儲,根據不同的操作及時更新數據;索引規則組件:接收客戶端接口的索引規則請求,包括索引規則的創建和刪除;協處理器組件:在數據請求處理組件在對數據進行處理后觸發該協處理器組件,該該協處理器組件讀取索引規則組件中的索引規則,根據索引規則對二級索引進行處理;和二級索引接口:根據協處理組件讀取到的索引規則,將對二級索引的處理轉移到二級索引模塊。其中,所述二級索引模塊主要是對二級索引進行處理,包括二級索引查詢、更新和存儲,所述二級索引模塊主要包含:客戶端接口:接收客戶端發送的數據請求,將對數據的查詢請求轉移到二級索引查詢組件,更新請求轉移到二級索引更新組件,接收相應的查詢結果返回到客戶端;二級索引更新組件:接收客戶端接口的更新請求,及時更新二級索引存儲組件中的二級索引;二級索引查詢組件:接收客戶端接口的查詢請求,通過向二級索引存儲組件查詢二級索引獲得Rowkey,將其返回到客戶端接口;二級索引查詢組件:接收客戶端接口的刪除請求,及時刪除二級索引存儲組件中的二級索引;二級索引存儲組件:對二級索引進行存儲;數據處理接口:接收數據處理模塊對二級索引的操作,將回調函數所獲得的數據轉移給二級索引模塊。一種基于內存數據庫的HBase二級索引構建與查詢的方法,包括以下步驟:S1客戶端發送二級索引規則創建請求,協處理器調用二級索引模塊接口,將二級索引信息和二級索引數據寫入二級索引模塊;S2客戶端發送二級索引規則刪除請求,協處理器調用二級索引模塊接口,刪除二級索引規則信息和索引數據;S3客戶端發送數據更新請求,數據處理模塊確定數據更新類型為插入,數據處理模塊將更新數據直接寫入HBase,協處理器調用二級索引模塊接口修改二級索引數據;S4客戶端發送數據更新請求,數據處理模塊確定數據更新類型為修改或刪除,協處理器協助數據處理模塊搜索到需要更新的數據,數據處理模塊更新數據,協處理器調用二級索引模塊接口修改索引數據;S5客戶端發送數據查詢請求,協處理器協助數據處理模塊搜索到需要查詢的數據,數據處理模塊獲取查詢數據并將獲取的數據返回給客戶端。其中,步驟S1進一步包括:S11客戶端發送二級索引規則創建請求;S12數據處理模塊接受二級索引規則創建請求,數據請求處理組件將二級索引創建情況分配給協處理器組件進行處理;S13協處理器組件對收到的二級索引創建請求中的表名和字段進行解析;S14協處理器組件根據索引創建請求的解析結果調用二級索引模塊接口寫入索引規則信息,并在二級索引模塊中根據表名和索引字段創建二級索引對應的Key值;S15協處理器組件掃描HBase中索引歸屬的表,將每條記錄的Rowkey和對應索引字段的權值寫入二級索引模塊。其中,步驟S2進一步包括:S21客戶端發送二級索引規則刪除請求;S22數據處理模塊接收索引刪除請求,分配給協處理器組件進行處理;S23協處理器組件對收到索引刪除請求中的索引名稱進行解析;S24協處理器組件根據解析結果調用二級索引模塊接口,刪除索引規則信息和索引數據。其中,步驟S3進一步包括:S31客戶端發送數據更新請求;S32數據處理模塊接收到數據更新請求后,經判斷,確定數據更新類型為插入,將更新數據直接寫入HBase,并將數據更新請求轉發給協處理器;S33協處理器判斷更新字段是否為索引字段,若數據更新字段是索引字段,協處理器調用二級索引模塊更新索引數據;若數據更新字段不是索引字段,數據更新結束。其中,步驟S4進一步包括:S41客戶端發送數據更新請求;S42數據處理模塊接收到數據更新請求后,經判斷,確定數據更新類型為修改或刪除,并將數據更新請求轉發給協處理器;S43協處理器判斷更新條件是否為索引字段,若更新條件為索引字段,協處理器遍歷HBase,獲取符合條件的Rowkey;若更新條件不為索引字段,協處理器將更新條件提交給二級索引模塊,二級索引模塊根據不同的更新條件進行精確、范圍或組合查詢,返回符合條件的Rowkey;S44協處理器將二級索引模塊返回的Rowkey返回給數據處理模塊,數據處理模塊根據協處理器返回的Rowkey更新數據;S45協處理器判斷更新字段是否為索引字段,若數據更新字段是索引字段,協處理器調用二級索引模塊更新索引數據;若數據更新字段不是索引字段,數據更新結束。其中,所述步驟S5進一步包括:S51客戶端發送數據查詢請求;S52數據處理模塊接收到數據查詢請求后,將數據查詢請求轉發給協處理器;S53協處理器判斷更新條件是否為索引字段,若更新條件為索引字段,協處理器遍歷HBase,獲取符合條件的Rowkey;若更新條件不為索引字段,協處理器將查詢條件提交給二級索引模塊,二級索引模塊根據不同的查詢條件進行精確、范圍或組合查詢,返回符合條件的Rowkey;S54協處理器將二級索引模塊返回的Rowkey返回給數據處理模塊;S55數據處理模塊根據協處理器返回的Rowkey獲取數據,并將數據返回給客戶端。在本發明中,數據處理模塊主要是對HBase中的數據進行處理;客戶端接口主要用于接收客戶端發送的各種數據請求,將對數據的請求轉移到數據請求處理組件,對索引規則的請求轉移到索引規則組件,接收相應的查詢結果返回到客戶端;數據請求處理組件用于接收客戶端接口的數據處理請求,在數據庫存儲組件中更新和刪除數據庫的數據,數據更新后,觸發協處理器,進行二級索引的處理;HBase主要用于對數據進行存儲,根據不同的操作及時更新數據;索引規則組件用于接收客戶端接口的索引規則請求,包括索引規則的創建和刪除;協處理器組件用于讀取索引規則組件中的索引規則,根據索引規則對二級索引進行處理;二級索引接口用于根據協處理組件讀取到的索引規則,將對二級索引的處理轉移到二級索引模塊。在本發明中,二級索引模塊主要是對二級索引進行處理,包括二級索引查詢、更新和存儲;客戶端接口用于接收客戶端發送的數據請求,將對數據的查詢請求轉移到二級索引查詢組件,更新請求轉移到二級索引更新組件,接收相應的查詢結果返回到客戶端;二級索引更新組件用于接收客戶端接口的更新請求,及時更新內存數據庫中的二級索引;二級索引查詢組件用于接收客戶端接口的查詢請求,通過向內存數據庫查詢二級索引獲得Rowkey,將其返回到客戶端接口;二級索引查詢組件用于接收客戶端接口的刪除請求,及時刪除內存數據庫中的二級索引;內存數據庫用于對二級索引進行存儲;數據處理接口用于接收數據處理模塊對二級索引的操作,將回調函數所獲得的數據轉移給二級索引模塊。在本發明中,內存數據庫是可以將數據放在內存中直接操作的數據庫。主流的內存數據庫包括Redis、FastDB、Memcached等。通過使用內存數據庫實現對多級查詢粒度的二級索引構建與查詢的方法和裝置,多級查詢粒度包括對數據的精確查詢、組合查詢和范圍查詢。其方法和裝置為:客戶端發出更新、查詢、刪除請求,對涉及條件過濾的字段和Rowkey在內存數據庫中更新、查詢、刪除索引,在處理查詢請求時,客戶端通過查詢二級索引快速獲得符合過濾條件的Rowkey,在HBase中通過獲得的Rowkey進行查詢,提高查詢的效率和性能。本發明是基于內存數據庫實現HBase二級索引的構建、存儲和查詢,可以實現二級索引的快速生成和對HBase數據庫的高效查詢;本專利充分分析了對HBase的查詢操作種類,針對不同的查詢操作,使用內存數據庫不同的數據結構,構建相應的二級索引,從而實現快速檢索;本發明中,當需求發生變化時,對HBase需要構建二級索引的字段進行配置,以滿足其需求。實現支持多級查詢粒度的二級索引構建方法如下:精準查詢:根據查詢條件,對索引字段直接進行精準查詢,查詢結果為HBase的Rowkey,再根據Rowkey對HBase進行查詢。其構建的二級索引形式為Key-Value,Key是HBase表名、字段名的組合,Value是HBase的Rowkey。范圍查詢:根據查詢條件,通過HBase的查詢條件,對內存數據庫構建二級索引方法和裝置中的有序參數進行范圍查詢,查詢結果為HBase的Rowkey,再根據Rowkey對HBase進行查詢。其構建的二級索引形式為Key-Score-Value,Key是HBase表名、字段名的組合,Score是HBase的字段值,Value為HBase的Rowkey。組合查詢:根據查詢條件,分別對精準查詢和范圍查詢進行組合,結果集進行差集或者交集,其結果為HBase的Rowkey,再根據Rowkey對HBase進行查詢。其構建的二級索引是Key-Value和Key-Value的組合,查詢結果求交集或者差集。以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。當前第1頁1 2 3 當前第1頁1 2 3