博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单、高性能、内嵌型、持久化的 K-V 数据库 NutsDB
阅读量:3716 次
发布时间:2019-05-21

本文共 3872 字,大约阅读时间需要 12 分钟。

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

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

项目特性

  • 高性能
  • 内嵌型
  • 支持 ACID 事务
  • 支持基本的 Put、Delete、Get 操作
  • 支持前缀扫描
  • 支持范围扫描
  • 除了基本的 String,还支持多种数据结构如列表(list)、集合(set)、有序集合(sorted set)

与其他数据库的比较

BoltDB

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

LevelDB, RocksDB

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

Badger

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

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

Benchmarks

被测试的数据库

  •  (默认配置)
  •  (默认配置)
  •  (默认配置)
  •  (默认配置)
  •  (默认配置 or 自定义)

压测用到的环境以及系统:

  • Go Version : go1.11.4 darwin/amd64
  • OS: Mac OS X 10.13.6
  • Architecture: x86_64
  • 16 GB 2133 MHz LPDDR3
  • CPU: 3.1 GHz Intel Core i7

压测结果:

BenchmarkBadgerDBPutValue64B-8    	   10000	    135431 ns/op	    2375 B/op	      74 allocs/opBenchmarkBadgerDBPutValue128B-8   	   10000	    119450 ns/op	    2503 B/op	      74 allocs/opBenchmarkBadgerDBPutValue256B-8   	   10000	    142451 ns/op	    2759 B/op	      74 allocs/opBenchmarkBadgerDBPutValue512B-8   	   10000	    109066 ns/op	    3270 B/op	      74 allocs/opBenchmarkBadgerDBGet-8            	 1000000	      1679 ns/op	     416 B/op	       9 allocs/opBenchmarkBoltDBPutValue64B-8      	    5000	    200487 ns/op	   20005 B/op	      59 allocs/opBenchmarkBoltDBPutValue128B-8     	    5000	    230297 ns/op	   13703 B/op	      64 allocs/opBenchmarkBoltDBPutValue256B-8     	    5000	    207220 ns/op	   16708 B/op	      64 allocs/opBenchmarkBoltDBPutValue512B-8     	    5000	    262358 ns/op	   17768 B/op	      64 allocs/opBenchmarkBoltDBGet-8              	 1000000	      1163 ns/op	     592 B/op	      10 allocs/opBenchmarkBoltDBRangeScans-8       	 1000000	      1226 ns/op	     584 B/op	       9 allocs/opBenchmarkBoltDBPrefixScans-8      	 1000000	      1275 ns/op	     584 B/op	       9 allocs/opBenchmarkBuntDBPutValue64B-8      	  200000	      8930 ns/op	     927 B/op	      14 allocs/opBenchmarkBuntDBPutValue128B-8     	  200000	      8892 ns/op	    1015 B/op	      15 allocs/opBenchmarkBuntDBPutValue256B-8     	  200000	     11282 ns/op	    1274 B/op	      16 allocs/opBenchmarkBuntDBPutValue512B-8     	  200000	     12323 ns/op	    1794 B/op	      16 allocs/opBenchmarkBuntDBGet-8              	 2000000	       675 ns/op	     104 B/op	       4 allocs/opBenchmarkLevelDBPutValue64B-8     	  100000	     11909 ns/op	     476 B/op	       7 allocs/opBenchmarkLevelDBPutValue128B-8    	  200000	     10838 ns/op	     254 B/op	       7 allocs/opBenchmarkLevelDBPutValue256B-8    	  100000	     11510 ns/op	     445 B/op	       7 allocs/opBenchmarkLevelDBPutValue512B-8    	  100000	     12661 ns/op	     799 B/op	       8 allocs/opBenchmarkLevelDBGet-8             	 1000000	      1371 ns/op	     184 B/op	       5 allocs/opBenchmarkNutsDBPutValue64B-8      	 1000000	      2472 ns/op	     670 B/op	      14 allocs/opBenchmarkNutsDBPutValue128B-8     	 1000000	      2182 ns/op	     664 B/op	      13 allocs/opBenchmarkNutsDBPutValue256B-8     	 1000000	      2579 ns/op	     920 B/op	      13 allocs/opBenchmarkNutsDBPutValue512B-8     	 1000000	      3640 ns/op	    1432 B/op	      13 allocs/opBenchmarkNutsDBGet-8              	 2000000	       781 ns/op	      88 B/op	       3 allocs/opBenchmarkNutsDBGetByMemoryMap-8   	   50000	     40734 ns/op	     888 B/op	      17 allocs/opBenchmarkNutsDBPrefixScan-8       	 1000000	      1293 ns/op	     656 B/op	       9 allocs/opBenchmarkNutsDBRangeScan-8        	 1000000	      2250 ns/op	     752 B/op	      12 allocs/op

结论:

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

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

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

 

转载地址:http://tfojn.baihongyu.com/

你可能感兴趣的文章
SSH三大框架整合
查看>>
卸载并安装JDK
查看>>
Mysql的卸载和安装
查看>>
2021-06-01
查看>>
2021-06-02
查看>>
2021-06-03
查看>>
2021-06-04
查看>>
2021-06-07
查看>>
2021-06-08
查看>>
2021-06-09
查看>>
HDU - 5912——Fraction
查看>>
最大连续子序列 (HDU - 1231)
查看>>
2019 CCPC网络选拔赛题
查看>>
异或算法
查看>>
Integer Inquiry(UVA—424)
查看>>
Overflow(UVA - 465)
查看>>
2019ICPCshenyang网络赛(C. Dawn-K's water)
查看>>
Knight Moves(POJ2243)
查看>>
N皇后问题(HDU—2253)
查看>>
序言页码
查看>>