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

我要开发同款
匿名用户2019年03月06日
125阅读

技术信息

开源地址
https://github.com/xujiajun/nutsdb
授权协议
Apache-2.0

作品详情

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

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

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

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

LevelDB,RocksDB

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

Badger

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

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

Bechmarks被测试的数据库BadgerDB (默认配置)BoltDB (默认配置)ButDB (默认配置)LevelDB (默认配置)NutsDB (默认配置or自定义)压测用到的环境以及系统:GoVersio:go1.11.4darwi/amd64OS:MacOSX10.13.6Architecture:x86_6416GB2133MHzLPDDR3CPU:3.1GHzItelCorei7压测结果:BechmarkBadgerDBPutValue64B-810000135431s/op2375B/op74allocs/opBechmarkBadgerDBPutValue128B-810000119450s/op2503B/op74allocs/opBechmarkBadgerDBPutValue256B-810000142451s/op2759B/op74allocs/opBechmarkBadgerDBPutValue512B-810000109066s/op3270B/op74allocs/opBechmarkBadgerDBGet-810000001679s/op416B/op9allocs/opBechmarkBoltDBPutValue64B-85000200487s/op20005B/op59allocs/opBechmarkBoltDBPutValue128B-85000230297s/op13703B/op64allocs/opBechmarkBoltDBPutValue256B-85000207220s/op16708B/op64allocs/opBechmarkBoltDBPutValue512B-85000262358s/op17768B/op64allocs/opBechmarkBoltDBGet-810000001163s/op592B/op10allocs/opBechmarkBoltDBRageScas-810000001226s/op584B/op9allocs/opBechmarkBoltDBPrefixScas-810000001275s/op584B/op9allocs/opBechmarkButDBPutValue64B-82000008930s/op927B/op14allocs/opBechmarkButDBPutValue128B-82000008892s/op1015B/op15allocs/opBechmarkButDBPutValue256B-820000011282s/op1274B/op16allocs/opBechmarkButDBPutValue512B-820000012323s/op1794B/op16allocs/opBechmarkButDBGet-82000000675s/op104B/op4allocs/opBechmarkLevelDBPutValue64B-810000011909s/op476B/op7allocs/opBechmarkLevelDBPutValue128B-820000010838s/op254B/op7allocs/opBechmarkLevelDBPutValue256B-810000011510s/op445B/op7allocs/opBechmarkLevelDBPutValue512B-810000012661s/op799B/op8allocs/opBechmarkLevelDBGet-810000001371s/op184B/op5allocs/opBechmarkNutsDBPutValue64B-810000002472s/op670B/op14allocs/opBechmarkNutsDBPutValue128B-810000002182s/op664B/op13allocs/opBechmarkNutsDBPutValue256B-810000002579s/op920B/op13allocs/opBechmarkNutsDBPutValue512B-810000003640s/op1432B/op13allocs/opBechmarkNutsDBGet-82000000781s/op88B/op3allocs/opBechmarkNutsDBGetByMemoryMap-85000040734s/op888B/op17allocs/opBechmarkNutsDBPrefixSca-810000001293s/op656B/op9allocs/opBechmarkNutsDBRageSca-810000002250s/op752B/op12allocs/op结论:

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

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

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

功能介绍

NutsDB是纯Go语言编写一个简单、高性能、内嵌型、持久化的key-value数据库。 NutsDB支持ACID事务,所有的操作都在事务中执行,保证了数据的完整性。NutsDB从v0.2.0版...

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

评论