minkv
是一款基于 Bitcask 存储模型构建的轻量级、快速、可靠的 KV 存储引擎,同时支持持久化存储。
其设计思想基于 LSM (Log-Structured Merge-tree)
数据结构和算法,此算法目前已经非常的成熟,它在许多现代数据库系统和存储引擎中被广泛使用,例如 LevelDB、RocksDB、Cassandra 等。
下载并解压安装包,将 minkv
可执行文件移动到 /usr/local/bin/
目录或将其添加到 $PATH
环境变量。
下载地址:
所有发布版本请点击这里
您可以在macOS终端或Linux shell提示符中粘贴以下命令并执行,注意权限问题。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/cfanbo/minkv/HEAD/install.sh)"
如果您使用的是 zsh
的话,命令行前面更改为 /bin/zsh
即可。
创建配置文件
db_dir = "/server/dbdata"
data = "dbdata"
file_max_size = 10240000
# 当更新key达到指定数量时刷新
sync_keys = 1
[server]
address = "127.0.0.1"
port = 6381
[grpc]
address = "127.0.0.1"
port = 6382
字段意义
-
db_dir
存放数据库文件目录路径 -
data
表示数据文件名,至少会存在一个data
文件,如果文件进行了分隔,则可能产生data.N
文件 -
file_max_size
表示文件大小达到这个值的时候,将自动进行文件分隔,生成新的数据文件,文件名为data.N
-
sync_keys
表示写入内容时达到多少次写或删除操作,会刷新缓存到磁盘。如果指定为
0
,则表示启用操作系统的缓存刷新磁盘机制 如果指定为1
,则表示每次更新文件后自动调用flush()
函数,对内容进行持久化 -
server.address
表示服务监听 IP 地址 -
server.port
表示服务监听端口号 -
grpc
为可选配置项,提交 gRPC 服务, 若为空,则表示不启用 gRPC 服务 对于sync_keys
的设置一定要根据业务访问量情况设置,如果设置为1
,会频繁的进行文件内容同步,可能性能会有一些影响。如果设置的值过大,可能存在意外断电导致部分内容未持久化磁盘,如果此值过大,超出了系统默认的同步周期,系统也会自动同步缓存至磁盘的。
$ minkv serve -c config.toml
Listening on 127.0.0.1:6381
客户端与服务端通讯基于 redis 协议开发,因此可以直接使用 redis 客户端进行访问,只需要指定对应的 ip:port
即可。
目前支持的指令
- get
- set
- del
- mset
- mget
- getset
- incr
- decr
- incrby
- decrby
- append
- exists
- expire
- pexpire
- expireat
- pexpireat
- ttl
- pttl
- persist
- keys
以上用户完全与 redis 用法一样。
对于备份只需要简单的复制数据库目录 db_dir
里的所有文件即可,同样恢复也是将所有备份文件放在这个目录即可。数据库文件主要是data
、data.N
数据文件和 hint.N
索引文件组成,文件名中n` 表示文件编号,索引文件编号与数据文件编写是一一对应的。
后续根据使用场景,可能会支持更多的指令。