NutsDB 简单、高性能、内嵌型、持久化的 K-V 数据库开源项目

我要开发同款
匿名用户2019年03月06日
54阅读
开发技术GO语言
所属分类Google Go、数据库相关
授权协议Apache-2.0

作品详情

NutsDB是纯Go语言编写一个简单、高性能、内嵌型、持久化的key-value数据库。

NutsDB支持ACID事务,所有的操作都在事务中执行,保证了数据的完整性。NutsDB从v0.2.0版本开始支持多种数据结构,如列表(list)、集合(set)、有序集合(sortedset)。

项目特性高性能内嵌型支持ACID事务支持基本的Put、Delete、Get操作支持前缀扫描支持范围扫描除了基本的String,还支持多种数据结构如列表(list)、集合(set)、有序集合(sortedset)与其他数据库的比较BoltDB

BoltDB和NutsDB很相似都是内嵌型的key-value数据库,同时支持事务。Bolt基于B+tree引擎模型,只有一个文件,NutsDB基于bitcask引擎模型,回生成多个文件。当然他们都支持范围扫描和前缀扫描这两个实用的特性。在写性能上,NutsDB在默认配置下,要比BoltDB好很多。

LevelDB,RocksDB

LevelDB和RocksDB都是基于LSMtree模型.其中LevelDB不支持事务.RocksDB目前还没看到golang实现的版本。

Badger

Badger也是基于LSMtree模型。但是写性能没有我想象中高,具体看下面的Benchmarks压测报告。

另外,以上数据库均不支持多种数据结构如list、set、sortedset,而NutsDB支持这些数据结构。

Benchmarks被测试的数据库BadgerDB (默认配置)BoltDB (默认配置)BuntDB (默认配置)LevelDB (默认配置)NutsDB (默认配置or自定义)压测用到的环境以及系统:GoVersion:go1.11.4darwin/amd64OS:MacOSX10.13.6Architecture:x86_6416GB2133MHzLPDDR3CPU:3.1GHzIntelCorei7压测结果:BenchmarkBadgerDBPutValue64B-810000135431ns/op2375B/op74allocs/opBenchmarkBadgerDBPutValue128B-810000119450ns/op2503B/op74allocs/opBenchmarkBadgerDBPutValue256B-810000142451ns/op2759B/op74allocs/opBenchmarkBadgerDBPutValue512B-810000109066ns/op3270B/op74allocs/opBenchmarkBadgerDBGet-810000001679ns/op416B/op9allocs/opBenchmarkBoltDBPutValue64B-85000200487ns/op20005B/op59allocs/opBenchmarkBoltDBPutValue128B-85000230297ns/op13703B/op64allocs/opBenchmarkBoltDBPutValue256B-85000207220ns/op16708B/op64allocs/opBenchmarkBoltDBPutValue512B-85000262358ns/op17768B/op64allocs/opBenchmarkBoltDBGet-810000001163ns/op592B/op10allocs/opBenchmarkBoltDBRangeScans-810000001226ns/op584B/op9allocs/opBenchmarkBoltDBPrefixScans-810000001275ns/op584B/op9allocs/opBenchmarkBuntDBPutValue64B-82000008930ns/op927B/op14allocs/opBenchmarkBuntDBPutValue128B-82000008892ns/op1015B/op15allocs/opBenchmarkBuntDBPutValue256B-820000011282ns/op1274B/op16allocs/opBenchmarkBuntDBPutValue512B-820000012323ns/op1794B/op16allocs/opBenchmarkBuntDBGet-82000000675ns/op104B/op4allocs/opBenchmarkLevelDBPutValue64B-810000011909ns/op476B/op7allocs/opBenchmarkLevelDBPutValue128B-820000010838ns/op254B/op7allocs/opBenchmarkLevelDBPutValue256B-810000011510ns/op445B/op7allocs/opBenchmarkLevelDBPutValue512B-810000012661ns/op799B/op8allocs/opBenchmarkLevelDBGet-810000001371ns/op184B/op5allocs/opBenchmarkNutsDBPutValue64B-810000002472ns/op670B/op14allocs/opBenchmarkNutsDBPutValue128B-810000002182ns/op664B/op13allocs/opBenchmarkNutsDBPutValue256B-810000002579ns/op920B/op13allocs/opBenchmarkNutsDBPutValue512B-810000003640ns/op1432B/op13allocs/opBenchmarkNutsDBGet-82000000781ns/op88B/op3allocs/opBenchmarkNutsDBGetByMemoryMap-85000040734ns/op888B/op17allocs/opBenchmarkNutsDBPrefixScan-810000001293ns/op656B/op9allocs/opBenchmarkNutsDBRangeScan-810000002250ns/op752B/op12allocs/op结论:

写性能:NutsDB、BuntDB、LevelDB最快。其中NutsDB最快,比LevelDB快近5-10x,比BuntDB快近5x,比BadgerDB快近100x,比BoltDB快近200x!

读性能:都很快.其中NutsDB(默认配置下)和BuntDB比其他数据库快近2x。NutsDB使用HintAndMemoryMapIdxMode读性能下降很多,大概会下降默认配置的近40x。

以上结果仅供参考,其实需要测试维度还有很多。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论