一個 issue 為 NutsDB 測試 10 億資料分享

xujiajun發表於2019-07-26

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

測試專案

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

起因

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

驗證測試一億條資料

回到正題: 為了驗證這個 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, 專門為節約記憶體設計。\
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。

最後,歡迎給nutsdb 提 issue,點 Star 關注,提交 PR,謝謝!

相關文章