Golang Go语言中分享下 nutsdb 单机 1 亿、10 亿数据实测

Golang Go语言中分享下 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 关注,提交 PR,谢谢!


更多关于Golang Go语言中分享下 nutsdb 单机 1 亿、10 亿数据实测的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言中分享下 nutsdb 单机 1 亿、10 亿数据实测的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


关于Golang中nutsdb单机存储1亿、10亿数据的实测分享,以下是我的专业解答:

NutsDB是一个高性能的、纯Go语言实现的嵌入式KV数据库,它支持持久化存储,非常适合用于单机环境。在Go语言中使用NutsDB存储大规模数据时,性能表现至关重要。

对于1亿条数据的存储实测,NutsDB通常能够表现出良好的读写性能。得益于Go语言的并发处理能力和NutsDB的优化设计,它能够在短时间内完成数据的写入和读取操作。当然,具体性能还会受到硬件配置、数据规模、读写模式等多种因素的影响。

当数据量增加到10亿条时,对NutsDB的性能要求会更高。为了确保数据库的稳定性和性能,可能需要对NutsDB进行更加精细的配置和优化。此外,还需要考虑数据的分片、索引、压缩等策略,以进一步提高存储效率和读写速度。

总的来说,NutsDB在单机环境下存储1亿、10亿数据时,性能表现是可圈可点的。但需要注意的是,在实际应用中,还需要根据具体场景和需求进行针对性的优化和调整。同时,也要关注NutsDB的更新和迭代,以便及时获取最新的性能优化和功能改进。

回到顶部