大資料批次鍵值查詢怎樣才會更快

xiaohuihui發表於2020-06-21

一般選擇資料庫來存放資料,並藉助資料表的索引來加快檢索速度。利用索引查詢資料,即使資料總量達到有10億,對於單條記錄的查詢效率大約在數十毫秒( 複雜度為LogN)。但是,如果需要查詢的鍵值很多,比如多達幾千甚至幾萬的時候,如果每次都獨立查詢,那讀取和比較也會累積到幾萬甚至幾十萬次,時間延遲由此也會漲到幾十分鐘甚至小時級別,這時候再簡單地使用資料庫索引對於使用者體驗必然是難以容忍的了。

比如下面這樣的查詢:

結構如下:

欄位 型別 備註
id long 1000000000001開始自增
data string 隨機字串(長度為 180 位元組)

對這樣結構的6億條資料,從中取1萬個隨機id對應的記錄,用Oracle大約就需要120 秒了。

使用的SQL大概這樣:select * from testdata where id in (…)

另外由於in中的個數最大1000個,還需要多次查詢後的結果再合併,處理起來也比較麻煩。

同樣的資料,用集算器來處理,程式碼簡單且查詢高效,看下面這個例子:


A B
1 =file("testdata.ctx").create() //開啟組表檔案testdata.ctx
2 =A1.index@3(id_idx) //載入三級索引
3 =keys //待查詢的隨機鍵值序列
4 =A1.icursor(;A3.contain(id),id_idx) //利用組表索引id_idx查詢

這裡使用了集算器組表功能,基於高效能索引和批次鍵值查詢,可以有效地應對這種場景。該場景下,集算器查詢僅用了20秒,相比Oracle的120秒提升了6倍。感興趣可以參考:

集算器還很容易嵌入到Java應用程式中, 有使用和獲得它的方法。

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2699766/,如需轉載,請註明出處,否則將追究法律責任。

相關文章