龙空技术网

NutsDB:又一个 Go 内嵌型 K/V 数据库

Go语言中文网 2952

前言:

眼前朋友们对“go语言的数据库”大体比较珍视,同学们都需要了解一些“go语言的数据库”的相关知识。那么小编也在网摘上汇集了一些对于“go语言的数据库””的相关知识,希望咱们能喜欢,我们一起来了解一下吧!

大家好,我是欧盆索思(opensource),每天为你带来优秀的开源项目!

1、一句话描述

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

项目地址:,Star 数:1.5k+。

2、简介

NutsDB 支持事务,从 v0.2.0 之后的版本开始支持 ACID 的特性,建议使用最新的 release 版本。v0.2.0 之前的版本,保持高性能,没有作 sync,但是具备高性能的写(本地测试,百万数据写入达 40~50W+/s)。所有的操作都在事务中执行。NutsDB 从 v0.2.0 版本开始支持多种数据结构,如列表(list)、集合(set)、有序集合(sorted set)。从 0.4.0 版本开始增加自定义配置读写方式、启动时候的文件载入方式、sync 是否开启等。

为什么有 NutsDB?

想找一个用纯 go 编写,尽量简单(方便二次开发、研究)、高性能(读写都能快一点)、内嵌型的(减少网络开销)数据库,最好支持事务。因为我觉得对于数据库而言,数据完整性很重要。如果能像 Redis 一样支持多种数据结构就更好了。而像 Redis 一般用作缓存,对于事务支持也很弱。此外,对于如何实现 kv 数据库的好奇心吧。数据库可以说是系统的核心,了解数据库的内核或者自己有实现,对更好的用轮子或者下次根据业务定制轮子都很有帮助。

天下没有银弹,NutsDB 也有他的局限,比如随着数据量的增大,索引变大,启动会慢,只想说 NutsDB 还有很多优化和提高的空间,由于本人精力以及能力有限。所以把这个项目开源出来。更重要的是我认为一个项目需要有人去使用,有人提意见才会成长。

3、Example

官方提供了各种操作的例子代码,见:。

4、Doc

该项目是国人主导开发的,有中文文档:。

5、QA

1、Q:现有的不能满足需求吗?

A:对比了如下几个:

BoltDB

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

LevelDB, RocksDB

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

Badger

Badger 也是基于 LSM tree 模型。但是写性能没有我想象中高。不支持 bucket。

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

6、比较

NutsDB VS Badger[1]

参考资料

[1]

NutsDB VS Badger:

标签: #go语言的数据库