大家好, 想給大家分享下我最近為 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,謝謝!