本發(fā)明涉及一種數(shù)據(jù)庫多字段查詢方法,尤其涉及一種基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法。
背景技術(shù):
::HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,它是利用HadoopHDFS作為其文件存儲系統(tǒng)。隨著HBase在性能和穩(wěn)定性持續(xù)改善,HBase逐漸成為在大數(shù)據(jù)NoSQL領(lǐng)域的標準之一。在Hadoop之上提供了類似于Bigtable的能力,是Apache的Hadoop項目的子項目,其不同于一般的關(guān)系數(shù)據(jù)庫而是一個適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫,另一個不同之處是HBase是基于列的而不是基于行的模式,以表的形式存儲數(shù)據(jù),表由行和列組成,列劃分為若干個列族(rowfamily),如下表所示。與nosql數(shù)據(jù)庫一樣,rowkey是用來檢索記錄的主鍵。訪問HBasetable中的行,只有三種方式:1、通過單個RowKey訪問;2、通過RowKey的range;3、全表掃描。RowKey行鍵(Rowkey)可以是任意字符串(最大長度是64KB,實際應(yīng)用中長度一般為10-100bytes),在HBase內(nèi)部,rowkey保存為字節(jié)數(shù)組。目前HBase主要應(yīng)用在結(jié)構(gòu)化和半結(jié)構(gòu)化的大數(shù)據(jù)存儲上,其在插入和讀取上都具有極高的性能表現(xiàn),這與它的數(shù)據(jù)組織方式有著密切的關(guān)系,在邏輯上,HBase的表數(shù)據(jù)按RowKey進行字典排序,RowKey實際上是數(shù)據(jù)表的一級索引(PrimaryIndex),由于HBase本身沒有二級索引(SecondaryIndex)機制,基于索引檢索數(shù)據(jù)只能單純地依靠RowKey,為了能支持多條件查詢,開發(fā)者需要將所有可能作為查詢條件的字段一一拼接到RowKey中,這是HBase開發(fā)中極為常見的做法,但是無論怎樣設(shè)計,單一RowKey固有的局限性決定了它不可能有效地支持多條件查詢。通常來說,RowKey只能針對條件中含有其首字段的查詢給予令人滿意的性能支持,在查詢其他字段時,表現(xiàn)就差強人意了,在極端情況下某些字段的查詢性能可能會退化為全表掃描的水平,這是因為字段在RowKey中的地位是不等價的,它們在RowKey中的排位決定了它們被檢索時的性能表現(xiàn),排序越靠前的字段在查詢中越具有優(yōu)勢,特別是首位字段具有特別的先發(fā)優(yōu)勢,如果查詢中包含首位字段,檢索時就可以通過首位字段的值確定RowKey的前綴部分,從而大幅度地收窄檢索區(qū)間,如果不包含則只能在全體數(shù)據(jù)的RowKey上逐一查找,由此可以想見兩者在性能上的差距。由上可見,如何在確保非侵入的前提下,以高性能為首要目標,通過建立二級多列索引實現(xiàn)了對復(fù)雜條件查詢的支持,成為HBase最受關(guān)注的研究方向。技術(shù)實現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是提供一種基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,能夠方便地采用二級索引查詢Hbase,快速匹配數(shù)據(jù),大大提高查詢性能。本發(fā)明為解決上述技術(shù)問題而采用的技術(shù)方案是提供一種基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,包括如下步驟:a)通過數(shù)據(jù)接口操作MapDB數(shù)據(jù)庫進行數(shù)據(jù)讀寫操作;b)在數(shù)據(jù)寫入HBase之前,先對數(shù)據(jù)進行格式化,生成Hbase的RowKey作為一級索引,并對數(shù)據(jù)分割相應(yīng)字段,將用于查詢的字段及其對應(yīng)的RowKey寫入MapDB數(shù)據(jù)庫中作為二級索引;c)接著再將數(shù)據(jù)在MapDB數(shù)據(jù)庫中按照HBase的表及列進行分類存儲;d)采用二級索引查詢HBase時,先通過查詢字段在MapDB中獲取對應(yīng)的RowKey集合,再通過HBase提供的get方法進行數(shù)據(jù)查詢。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述步驟a)通過遠程rmi接口操作MapDB數(shù)據(jù)庫進行數(shù)據(jù)讀寫操作,所述遠程rmi接口調(diào)用為采用java編程語言開發(fā)的實現(xiàn)遠程對象之間無縫調(diào)用的數(shù)據(jù)接口。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述步驟b)在寫入HBase數(shù)據(jù)之前,每條入庫數(shù)據(jù)均生成一個RowKey以及至少一個用于查詢的字段,并將用于查詢的字段通過rmi接口調(diào)用MapDB,將字段值及rowkey寫入到MapDB中。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述MapDB采用哈希表HashMap存儲字段值及其對應(yīng)的Hbase的RowKey,并將數(shù)據(jù)按照不同的業(yè)務(wù)存儲到不同的MapDB中。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述步驟c)中MapDB數(shù)據(jù)庫采用HBase的表名作為獲取HashMap的key值,采用HBase列作為HashMap中的鍵,并在HashMap里面存儲RowKey集合。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述MapDB采用文件存放方式將數(shù)據(jù)寫入到本地磁盤進行持久化,并在JVM關(guān)閉時關(guān)閉文件流。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述步驟d)通過HBase的客戶端進行條件查詢時,先通過rmi調(diào)用MapDB進行查詢獲取RowKey,再通過HBase提供的get方法獲取數(shù)據(jù)。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述步驟b)中每條入庫數(shù)據(jù)格式化生成RowKey后,按照分隔符進行分割,并將用于后續(xù)查詢的字段及字段值拼接進來,寫入List集合中;所述步驟c)調(diào)用MapDB的寫入接口將RowKey、HBase表名及List集合傳遞過去,寫入MapDB數(shù)據(jù)庫中;所述步驟d)采用二級索引進行數(shù)據(jù)查詢時,將查詢條件按照入庫時的拼接方式將字段及字段值進行拼接,寫入List集合中,并遠程rmi接口調(diào)用MapDB的查詢接口將HBase表名及List集合傳遞過去,獲取相應(yīng)的RowKey集合,返回結(jié)果為List<String>集合,并通過字節(jié)流的方式返回到HBase的客戶端,所述HBase的客戶端采用HTable的get方法,直接將整個List<String>集合作為參數(shù)進行數(shù)據(jù)檢索。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,所述HBase的客戶端接收到MapDB服務(wù)器返回的RowKey集合后,判斷RowKey集合是否存在數(shù)據(jù),不存在的則直接返回;如果RowKey集合中存在數(shù)據(jù),首先遍歷該RowKey集合獲取所有的RowKey,構(gòu)造GET對象并寫入到該RowKey集合中,然后通過HBase的批量GET方法獲取HBase數(shù)據(jù)。上述的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,其中,還包括查詢HBase時,如果查詢字段中包含一級索引RowKey中的首位字段,則直接通過Scan設(shè)置StartKey和EndKey參數(shù)后進行數(shù)據(jù)查詢。本發(fā)明對比現(xiàn)有技術(shù)有如下的有益效果:本發(fā)明提供的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,在數(shù)據(jù)寫入HBase之前,先對數(shù)據(jù)進行格式化并分割相應(yīng)字段,將用于查詢的字段及其對應(yīng)的RowKey寫入MapDB數(shù)據(jù)庫中作為二級索引,從而能夠方便地采用二級索引查詢Hbase,快速匹配數(shù)據(jù),大大提高查詢性能。附圖說明圖1為本發(fā)明基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索流程示意圖;圖2為本發(fā)明使用的MapDB數(shù)據(jù)庫的結(jié)構(gòu)導(dǎo)圖;圖3為本發(fā)明數(shù)據(jù)寫入HBase的流程圖;圖4為本發(fā)明HBase數(shù)據(jù)查詢的流程圖。具體實施方式下面結(jié)合附圖和實施例對本發(fā)明作進一步的描述。圖1為本發(fā)明基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索流程示意圖。請參見圖1,本發(fā)明提供的基于MapDB構(gòu)建的HBase數(shù)據(jù)檢索方法,包括如下步驟:步驟S1:通過數(shù)據(jù)接口操作MapDB數(shù)據(jù)庫進行數(shù)據(jù)讀寫操作;步驟S2:在數(shù)據(jù)寫入HBase之前,先對數(shù)據(jù)進行格式化,生成Hbase的RowKey作為一級索引,并對數(shù)據(jù)分割相應(yīng)字段,將用于查詢的字段及其對應(yīng)的RowKey寫入MapDB數(shù)據(jù)庫中作為二級索引;步驟S3:接著再將數(shù)據(jù)在MapDB數(shù)據(jù)庫中按照HBase的表及列進行分類存儲;步驟S4:采用二級索引查詢HBase時,先通過查詢字段在MapDB中獲取對應(yīng)的RowKey集合,再通過HBase提供的get方法進行數(shù)據(jù)查詢。本發(fā)明使用Java遠程消息交換協(xié)議JRMP(JavaRemoteMessagingProtocol)進行通信,構(gòu)建MapDB提供數(shù)據(jù)操作服務(wù)器。在數(shù)據(jù)寫入HBase數(shù)據(jù)庫之前,生成HBase的RowKey,并將需要用于查詢的字段及對應(yīng)的值發(fā)送到MapDB提供的接口中,MapDB按照字段名為索引構(gòu)建一個Map結(jié)構(gòu)的存儲,將字段的值及對應(yīng)的HBase的RowKey存儲到Map結(jié)構(gòu)中。如果字段值已經(jīng)存在的,則將新的RowKey加入到原有的隊列中,并寫入硬盤中。在MapDB中存儲完成后,按照HBase原有的API將數(shù)據(jù)寫入HBase中。MapDB中采用Hash存儲,將對應(yīng)的字段值Hash分散,在進行數(shù)據(jù)匹配時可以達到最快的匹配速度。對于數(shù)據(jù)量比較的大可以按照不同的業(yè)務(wù)存儲到不同的MapDB中,提高MapDB的操作速度。在進行HBase條件查詢時,對應(yīng)滿足RowKey設(shè)計規(guī)則的查詢,則直接通過RowKey進行查詢,對于不滿足RowKey規(guī)則的,則在進行查詢是,將需要查詢的表名、字段及字段值。發(fā)送到MapDB提供服務(wù)的接口中。MapDB通過表名及字段名獲取存儲對應(yīng)的Map數(shù)據(jù)表,在從數(shù)據(jù)表中根據(jù)字段值進行檢索獲取RowKey的集合并返回客戶端,客戶端在接收到RowKey集合后,根據(jù)RowKey進行Get操作,從HBase數(shù)據(jù)庫中獲取數(shù)據(jù)。以此到達最快的查詢性能。由于在HBase數(shù)據(jù)庫查詢中,GET查詢速度是最快的,因為GET查詢是直接通過RowKey到對應(yīng)的META表中獲取Region。并快速獲取到該Region中RowKey對應(yīng)的值。本發(fā)明具備多條件查詢優(yōu)化方法并具備快速獲取RowKey的能力,通過MapDB數(shù)據(jù)庫能提供遠程調(diào)用功能,并實現(xiàn)MapDB數(shù)據(jù)庫的按照條件的規(guī)則進行數(shù)據(jù)寫入及數(shù)據(jù)查詢,達到優(yōu)化的目的。MapDB數(shù)據(jù)庫具備快速數(shù)據(jù)寫入及查詢,且MapDB是不需要安裝的只需要jar包即可使用,所有的數(shù)據(jù)都是暫時緩存在內(nèi)存中,寫入磁盤上,在內(nèi)存的查詢速度上遠遠高于在磁盤上做查詢。通過字段值構(gòu)造RowKey的倒排索引以到達最快的RowKey查詢。提高了多條件查詢的效率,為多條件查詢提供了優(yōu)化的方法;該方法的條件查詢過程較為簡潔,且無需安裝,因此更為高效,實用性強,易于推廣。本發(fā)明屬于一種基于MapDB構(gòu)建HBase二級索引的方法。主要涉及MapDB數(shù)據(jù)庫的遠程服務(wù)、MapDB數(shù)據(jù)庫存儲設(shè)計、查詢時方案設(shè)計三方面。本發(fā)明將所有入庫HBase的數(shù)據(jù)對應(yīng)RowKey及需要查詢的字段寫入集中式的MapDB數(shù)據(jù)庫,滿足分布式入庫的需求,按照查詢字段進行分組,存儲到對應(yīng)的集合中,并將字段值進行Hash分組,對應(yīng)的RowKey進行倒排索引存儲。為HBase表的多條件查詢做好優(yōu)化準備。在客戶端進行多條件查詢時,先通過MapDB的服務(wù)接口獲取該條件的RowKey集合,在通過RowKey集合進行GET查詢,減少全表數(shù)據(jù)掃描,提高查詢性能,達到優(yōu)化效果。具體實施過程如下:1、編程實現(xiàn)遠程服務(wù),在服務(wù)端實現(xiàn)MapDB數(shù)據(jù)庫的存儲。存儲結(jié)構(gòu)上根據(jù)字段名稱作為HashMap表的Key值,可以通過該Key值獲取對應(yīng)的HashMap表的存儲位置及數(shù)據(jù)。字段值作為HashMap表的Key值,而對應(yīng)的RowKey則采用集合的方式存儲到HashMap表對應(yīng)的Value。通過HashMap的快速Key值匹配,提高多字段查詢的獲取的RowKey的性能。編程實現(xiàn)遠程服務(wù),在服務(wù)端實現(xiàn)MapDB數(shù)據(jù)庫的查詢,接收客戶端傳遞過來的字段及字段值。通過字段名獲取對應(yīng)的HashMap表,在根據(jù)在字段值獲取對應(yīng)的RowKey集合,并返回客戶端。2、客戶端在寫入HBase表前,先將數(shù)據(jù)進行格式化,生成RowKey及分割相應(yīng)的字段。每條入庫數(shù)據(jù)會生成一個RowKey及多個用于查詢的字段。并將RowKey及字段、字段值通過MapDB的服務(wù)接口,寫到到MapDB數(shù)據(jù)庫中。寫入方式采用上述的方法進行。保證達到優(yōu)化的效果3、在多條件查詢數(shù)據(jù)時,將字段及字段值通過MapDB的服務(wù)接口,調(diào)用其查詢方法獲取字段條件對應(yīng)的RowKey集合,在用這個RowKey集合調(diào)用HBase的GET方法進行數(shù)據(jù)查詢。本發(fā)明的詳細優(yōu)化步驟如下:1、首先使用Java遠程消息交換協(xié)議JRMP(JavaRemoteMessagingProtocol)進行通信,構(gòu)建MapDB提供數(shù)據(jù)操作服務(wù),并在服務(wù)器上注冊TCP端口。然后啟動該服務(wù),確保其他的服務(wù)器可以通過服務(wù)器地址+端口號+服務(wù)名進行接口調(diào)用。并進行正常的數(shù)據(jù)傳輸。數(shù)據(jù)寫入HBase之前,通過MapDB服務(wù)器的服務(wù)器地址+端口+服務(wù)名獲取MapDB服務(wù)器的接口。將數(shù)據(jù)按照分割符進行拆分,按照最常用的查詢方式生成RowKey。并將可能用于查詢的字段名及字段值用”#”進行連接,并放入集合中。并按照RowKey值作為key,集合做Value放入到Map中。以批量的方式將這些數(shù)據(jù)和HBase表名通過MapDB的接口調(diào)用它的寫入方法。MapDB服務(wù)器的寫入方法接收到數(shù)據(jù)后,將數(shù)據(jù)集進行遍歷獲取RowKey、字段名、字段值。通過字段名獲取HashMap集合,獲取到HashMap集合后,首先使用字段值到HashMap集合中匹配是否已經(jīng)存在相應(yīng)的字段值,存在則將本次的RowKey加入到集合中,不存在的則創(chuàng)建集合將本次RowKey寫入到集合中,并將該集合寫入到HashMap集合中。并定時寫入磁盤中。持久化數(shù)據(jù),確保數(shù)據(jù)不會出現(xiàn)丟失。比如新建一個用于提供服務(wù)的接口類實,并繼承Remote這個類實現(xiàn)遠程調(diào)用過程。Remote是JAVA程序自帶的類,具體類路徑j(luò)ava.rmi.Remote。接口類中定義寫入及查詢兩個方法。在實現(xiàn)類的實現(xiàn)上述接口,并覆寫上述的寫入及查詢接。該實現(xiàn)必須繼承UnicastRemoteObject這個類,UnicastRemoteObject是有JAVA自帶的程序提供,具體的類路徑是:java.rmi.server.UnicastRemoteObject。在寫入方法中,首先通過參數(shù)HBase表名獲取MapDB的存儲接口。利用字段名稱獲取HashMap表,并將字段值作為key,RowKey集合作為value寫入HashMap表中,對于多個字段的則循環(huán)上述內(nèi)容,最后將數(shù)據(jù)提交至MapDB數(shù)據(jù)庫中。2、根據(jù)用戶程序指定的查詢條件,查詢條件滿足RowKey設(shè)計規(guī)則,則直接通過Scan中的參數(shù)設(shè)置,設(shè)置StartKey和EndKey進行數(shù)據(jù)查詢,對于不滿足該設(shè)計條件的,獲取MapDB服務(wù)的接口。并將查詢條件作為參數(shù)調(diào)用接口的查詢方法。查詢方法中通過參數(shù)HBase表名獲取MapDB的存儲接口。利用字段名稱獲取HashMap表,并通過字段值在HashMap表中獲取對應(yīng)的RowKey集合,對應(yīng)多個字段查詢,則循環(huán)執(zhí)行上述內(nèi)容。最后將多個RowKey集合結(jié)合獲取交集部分返回客戶端。3、進行數(shù)據(jù)入庫時,首先格式化數(shù)據(jù),每條數(shù)據(jù)生成RowKey,按照分隔符進行分割,并將用于后續(xù)查詢的字段及字段值拼接進來,寫入List集合中。接著調(diào)用MapDB的寫入接口,將RowKey、HBase表名及List集合傳遞過去,寫入MapDB數(shù)據(jù)庫中。MapDB服務(wù)器的查詢方法接收到參數(shù)后,按照HBase表名和字段名獲取MapDB數(shù)據(jù)庫中對應(yīng)的HashMap集合。在通過字段值到HashMap集合獲取RowKey集合,并將該集合返回給客戶端。也就是說,進行數(shù)據(jù)查詢時,將查詢條件按照入庫時的拼接方式將字段及字段值進行拼接,寫入List集合中,并調(diào)用MapDB的查詢接口,將HBase表名及List集合傳遞過去,獲取相應(yīng)的RowKey集合,通過該RowKey集合調(diào)用HBase的查詢方法,進行數(shù)據(jù)檢索。4、客戶端接收到MapDB服務(wù)器返回的RowKey集合后,判斷RowKey集合是否存在數(shù)據(jù),不存在的則直接返回。RowKey集合中存在數(shù)據(jù)的,首先遍歷該集合獲取所有的RowKey,構(gòu)造GET對象,并寫入到集合中。通過HBase的批量獲取GET的方法,通過該集合獲取HBase的數(shù)據(jù),至此整個查詢結(jié)束。此外,通過MapDB數(shù)據(jù)庫獲取到相應(yīng)的RowKey集合在進行查詢時,可以根據(jù)HBase中的相關(guān)讀操作的參數(shù)配置,如caching設(shè)置大一些有利于讀。Batch設(shè)置大一些有利于一次可以抓取多條數(shù)據(jù),通過這些參數(shù)的合理設(shè)置可以提高性能,達到優(yōu)化的目的。本發(fā)明的具體實施操作過程如下:1、首先部署分布式集群環(huán)境,該集群中的硬件環(huán)境是10臺服務(wù)器,每臺服務(wù)器是64G內(nèi)存,CPU采用4個Intel(R)Xeon(R)CPUE5-2630v2@2.60GHz,硬盤是6*1T,操作系統(tǒng)是Centos6.5。按照官方文檔在服務(wù)器中安裝Hadoop組件。然后將HDFS、Zookeeper及HBase按照正常順序開啟服務(wù)。本實例中源數(shù)據(jù)的格式是1451011513,332,30,2bbb1935567cac4f2bbb1934567cac4f,899,88第一列是時間(秒),第二列是毫秒,第三列是設(shè)備編號,第四列是數(shù)據(jù)ID,第五列是廠商編號,第五列是位置編號。條件查詢是指給定設(shè)備編號或廠商編碼或位置編號,查找在滿足這些條件的所有信息,源數(shù)據(jù)有100億條數(shù)據(jù),提高查詢效率是必要的。經(jīng)過分析。因為查詢的條件是任意不固定的,所以單從RowKey設(shè)計上進行查詢優(yōu)化是無法滿足性能要求的,必須查詢二級索引的方案來提升查詢性能,采用MapDB數(shù)據(jù)庫作為二級索引的數(shù)據(jù)存儲,不在RowKey的查詢范圍內(nèi)的都通過MapDB數(shù)據(jù)庫構(gòu)建二級索引,通過MapDB數(shù)據(jù)庫獲取不同的查詢字段及對應(yīng)的RowKey,達到優(yōu)化的結(jié)果。2、再挑選其中一臺主節(jié)點服務(wù)器作為MapDB數(shù)據(jù)庫提供服務(wù)的服務(wù)節(jié)點,將已經(jīng)實現(xiàn)RMI服務(wù)的程序部署到該節(jié)點上,并啟動注冊服務(wù),注冊端口為2007,該端口號可以根據(jù)實際情況進行調(diào)整,集群上的其他服務(wù)器可以通過這個節(jié)點的ip、端口號及服務(wù)名去調(diào)用MapDB數(shù)據(jù)庫的服務(wù)。MapDB數(shù)據(jù)庫的數(shù)據(jù)操作如圖2所示。在實例化MapDB是采用newFileDB的這種方式,這種方式可以將數(shù)據(jù)持久化到本地磁盤上,另外需要設(shè)置closeOnJvmShutdown方法,保障在JVM關(guān)閉的時候才關(guān)閉MapDB數(shù)據(jù)庫,而MapDB數(shù)據(jù)庫在此采用HashMap的存儲方式,不需要采用TreeMap的結(jié)構(gòu),因為不需要對數(shù)據(jù)進行排序且數(shù)據(jù)更加離散在進行數(shù)據(jù)檢索時達到更好的效果。每批數(shù)據(jù)寫入MapDB數(shù)據(jù)庫后,都需要調(diào)用commit的方法,將數(shù)據(jù)寫入到本地磁盤進行持久化,保障數(shù)據(jù)的安全可靠性。3、客戶端導(dǎo)入數(shù)據(jù)時,將數(shù)據(jù)進行格式化,選用設(shè)備編號作為RowKey,廠商編號、位置編號則采用二級索引的方式進行存儲。整體數(shù)據(jù)入庫流程如圖3所示,將數(shù)據(jù)按照每10000條作為一批數(shù)據(jù),每批數(shù)據(jù)入庫HBase之前調(diào)用MapDB數(shù)據(jù)庫的服務(wù)接口,將RowKey、廠商編號、位置編號作為參數(shù)傳遞到該接口上。確認節(jié)點調(diào)用成功后,將數(shù)據(jù)寫入HBase中,所有的數(shù)據(jù)存儲為一個列,減少IO的壓力。達到更快的入庫性能。4、在優(yōu)化查詢時,如圖4所示,首先是客戶端獲取查詢條件時從條件上判斷是否是設(shè)備編號的查詢,如果是只需調(diào)用HBase的scan方法,然后設(shè)置StartKey和EndKey。使用HTable的getScanner方法進行進行獲取數(shù)據(jù),客戶端與regionserver通信一次,會找到regionserver的region,并掃描region返回一定數(shù)據(jù)。這個數(shù)據(jù)量是由scan的Batch指定的。而caching的作用就是通信一次找到region,調(diào)用掃描caching次,也就是說用這兩個參數(shù)的話,一次通信可以返回的數(shù)據(jù)為caching*batch條,顯然這會減少客戶端和rs的通信量。5、在所有非設(shè)備編號查詢中,先提取查詢條件,調(diào)用MapDB數(shù)據(jù)庫的服務(wù)接口,獲取RowKey集合,返回結(jié)果為List<String>集合,通過字節(jié)流的方式返回到客戶端??蛻舳瞬捎肏Table的get方法,直接將整個集合作為參數(shù),而不采用遍歷集合在進行查詢,這樣可以減少RPC的請求次數(shù),進而提升查詢的性能。在查詢過程中,客戶端采用靜態(tài)變量的方式保存MapDB數(shù)據(jù)庫的服務(wù)接口,不需要每次入庫都需要重新去獲取該服務(wù)接口。雖然本發(fā)明已以較佳實施例揭示如上,然其并非用以限定本發(fā)明,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的修改和完善,因此本發(fā)明的保護范圍當(dāng)以權(quán)利要求書所界定的為準。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3