nutsdb与mysql_分享下 nutsdb 单机 1 亿、10 亿数据实测
大家好, 想給大家分享下我最近為 nutsdb 做的數(shù)據(jù)測試。
測試項(xiàng)目
起因
事情起因是這個(gè) issue ,簡單說就是內(nèi)存高了,不夠用了。
可能很多人不知道 NutsDB。簡單介紹下,NutsDB 是我?guī)讉€(gè)月以前開源的一個(gè) Go 語言編寫的內(nèi)嵌型 KV 數(shù)據(jù)庫,支持多種數(shù)據(jù)結(jié)構(gòu)。開源取的的反饋:一開源就上了 Go 趨勢榜。一周斬獲 500+star,也得到很多同行的關(guān)注,給我提建議。還有幾個(gè)用在了生產(chǎn)環(huán)境。
驗(yàn)證測試一億條數(shù)據(jù)
回到正題:
為了驗(yàn)證這個(gè) issue
于是我先測了一個(gè)億的數(shù)據(jù)量
版本:nutsdb V0.4.0
服務(wù)器配置:Ubuntu 16.04 64 位 8 核 64G
數(shù)據(jù)量:占有 11G 左右 (目前版本沒有做壓縮)
為了加快測試,沒有設(shè)置實(shí)時(shí) sync,寫入速度:25.7w/s
key\value 類似:
key := []byte("namename" + strconv.Itoa(i))
val := []byte("valvalvavalvalvalvavalvalvalvavalvalvalvaval" + strconv.Itoa(i))
測試結(jié)果:
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%
發(fā)現(xiàn) 消耗內(nèi)存是數(shù)據(jù)量的 3.46 倍左右,說實(shí)話雖然比他說的少幾倍,但我還是有點(diǎn)接受不了。怎么辦?
解決
于是開發(fā)了新的模式 EntryIdxMode:HintBPTSparseIdxMode, 專門為節(jié)約內(nèi)存設(shè)計(jì)。原理采用 b+樹多級(jí)索引的方式。
master 分支 已經(jīng)支持了,有興趣的歡迎嘗試。
那我們單機(jī)先來測試 10 億條數(shù)據(jù)。
新模式測試 10 億條數(shù)據(jù)
版本 :nutsdb master 分支
主機(jī)配置:Ubuntu 16.04 64 位 2 核 2G
key\value 類似上面的
為了加快測試,沒有設(shè)置實(shí)時(shí) sync
測試結(jié)果:
Mem : 1999 MB , Free: 1786 MB , Used:53 MB , Usage:2.688618%
Mem : 1999 MB , Free: 1695 MB , Used:135 MB , Usage:6.784733%
內(nèi)存占用只有 82MB,完成 10 億條數(shù)據(jù)插入,但是寫速度降到 4.35w/s。產(chǎn)生索引數(shù)據(jù)文件 153G
再來看下讀的表現(xiàn),讀取 10 條數(shù)據(jù),這個(gè)是沒有加緩存的結(jié)果如下:
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,點(diǎn) Star 關(guān)注,提交 PR,謝謝!
總結(jié)
以上是生活随笔為你收集整理的nutsdb与mysql_分享下 nutsdb 单机 1 亿、10 亿数据实测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fastjson转换时有大括号或者冒号或
- 下一篇: 周五怎么表示 mysql_完美起航-My