1. 程式人生 > >分享下 NutsDB 單機 1 億、10 億資料實測

分享下 NutsDB 單機 1 億、10 億資料實測

大家好, 想給大家分享下我最近為 nutsdb 做的資料測試。

測試專案

github 地址: https://github.com/xujiajun/nutsdb

起因

事情起因是這個 issue ,簡單說就是記憶體高了,不夠用了。

可能很多人不知道 NutsDB。簡單介紹下,NutsDB 是我幾個月以前開源的一個 Go 語言編寫的內嵌型 KV 資料庫,支援多種資料結構。開源取的的反饋:一開源就上了 Go 趨勢榜。一週斬獲 500+star,也得到很多同行的關注,給我提建議。還有幾個用在了生產環境。

驗證測試一億條資料

回到正題: 為了驗證這個 issue 於是我先測了一個億的資料量

版本:nutsdb V0.4.0
伺服器配置:Ubuntu  16.04 64 位 8 核 64G
資料量:佔有 11G 左右 (目前版本沒有做壓縮)
為了加快測試,沒有設定實時 sync,寫入速度:25.7w/s

key\value 類似:

key := []byte("namename" + strconv.Itoa(i))
val := []byte("valvalvavalvalvalvavalvalvalvavalvalvalvaval" + strconv.Itoa(i))

測試結果:

Mem : 64430 MB , Free: 63776 MB , Used:176 MB , Usage:0.273957%
start db index cost time:  72.076µs
batch put data cost:  6m29.067011134s
Mem : 64430 MB , Free: 24760 MB , Used:39147 MB , Usage:60.759105%

發現 消耗記憶體是資料量的 3.46 倍左右,說實話雖然比他說的少幾倍,但我還是有點接受不了。怎麼辦?

解決

於是開發了新的模式 EntryIdxMode:HintBPTSparseIdxMode, 專門為節約記憶體設計。原理採用 b+樹多級索引的方式。

master 分支 已經支援了,有興趣的歡迎嘗試。

那我們單機先來測試 10 億條資料。

新模式測試 10 億條資料

版本 :nutsdb master 分支
主機配置:Ubuntu 16.04 64 位 2 核 2G
key\value 類似上面的
為了加快測試,沒有設定實時 sync

測試結果:

Mem : 1999 MB , Free: 1786 MB , Used:53 MB , Usage:2.688618%
Mem : 1999 MB , Free: 1695 MB , Used:135 MB , Usage:6.784733%

記憶體佔用只有 82MB,完成 10 億條資料插入,但是寫速度降到 4.35w/s。產生索引資料檔案 153G

再來看下讀的表現,讀取 10 條資料,這個是沒有加快取的結果如下:

load cost: 2.607796193s
key , find val namename0 valvalvavalvalvalvavalvalvalvavalvalvalvaval0
key , find val namename1 valvalvavalvalvalvavalvalvalvavalvalvalvaval1
key , find val namename2 valvalvavalvalvalvavalvalvalvavalvalvalvaval2
key , find val namename3 valvalvavalvalvalvavalvalvalvavalvalvalvaval3
key , find val namename4 valvalvavalvalvalvavalvalvalvavalvalvalvaval4
key , find val namename5 valvalvavalvalvalvavalvalvalvavalvalvalvaval5
key , find val namename6 valvalvavalvalvalvavalvalvalvavalvalvalvaval6
key , find val namename7 valvalvavalvalvalvavalvalvalvavalvalvalvaval7
key , find val namename8 valvalvavalvalvalvavalvalvalvavalvalvalvaval8
key , find val namename9 valvalvavalvalvalvavalvalvalvavalvalvalvaval9
read cost 87.208728ms

好了分享到這裡。歡迎留言交流。

最後,歡迎去 nutsdb 提 issue,點 Star 關注,