一个稳定高性能快速内嵌的 k-v 数据库
Posted 非著名程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个稳定高性能快速内嵌的 k-v 数据库相关的知识,希望对你有一定的参考价值。
【公众号回复 “1024”,免费领取程序员赚钱实操经验】
大家好,我是章鱼猫。
今天给大家推荐的这个开源项目还是来自于读者的投稿。
这个开源项目名叫:rosedb,看名字就知道是跟数据库有关的开源项目哈。
rosedb 是一个稳定、高性能、快速、内嵌的 k-v 数据库,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称风格和 Redis 类似。
rosedb 基于简单的 bitcask 模型,数据文件布局类似 LSM Tree 中的 WAL 日志,纯 Golang 实现,易于使用、扩展。
这个数据库的特性有哪些呢?
支持丰富的数据结构:字符串、列表、哈希表、集合、有序集合。
内嵌使用简单至极,无需任何安装部署(
import "github.com/roseduan/rosedb"
)。低延迟、高吞吐(具体请见英文 README 的 Benchmark)。
不同数据类型的操作可以完全并行。
支持客户端命令行操作。
支持过期时间。
String
数据类型支持前缀和范围扫描。
一个 rosedb 实例,其实就是系统上的一个文件夹,在这个文件夹中,除了一些配置外,最主要的便是数据文件。一个实例中,只会存在一个活跃的数据文件进行写操作,如果这个文件的大小达到了设置的上限,那么这个文件会被关闭,然后创建一个新的活跃文件。
其余的文件,称之为已归档文件,这些文件都是已经被关闭,不能在上面进行写操作,但是可以进行读操作。
所以整个数据库实例就是当前活跃文件、已归档文件和其他配置的一个集合:
在每一个文件中,写数据的操作只会追加到文件的末尾,这保证了写操作不会进行额外的磁盘寻址。写入的数据是以一个个被称为 Entry 的结构组织起来的,Entry 的主要数据结构如下:
因此一个数据文件可以看做是多个 Entry 的集合:
所有的写入、删除、更新操作,都会被封装成一个 Entry,追加到数据文件的末尾。一个 key 可能会被多次更新,或者被删除,因此数据文件当中可能存在冗余的 Entry 数据。在这种情况下,我们需要合并数据文件,来清除冗余的 Entry 数据,回收磁盘空间。
具体使用方法:
作者非常用心,还专门在 B 站上录制了学习视频,供大家学习使用,如下:
开源项目作者的愿景是打造一个高效的 k-v 存储引擎,你可以给他们提任何建议,也请给他们一个 start ✨ 吧,非常感谢!
开源项目地址:https://github.com/roseduan/rosedb
开源项目作者:roseduan
最近,章鱼猫建了一个「GitHub 精选交流群」,欢迎大家一起交流优秀开源项目,也可以宣传自己的开源项目,在 「GitHub 精选」公众号后台回复【加群】邀请你入群。
---特别推荐---
特别推荐:一个新的优质的专注分享各种浏览器插件、黑科技教程、各种你想不到的高效率软件及工具的公众号,「黑科技指北」,非常值得大家关注。点击下方公众号卡片,直接关注。
以上是关于一个稳定高性能快速内嵌的 k-v 数据库的主要内容,如果未能解决你的问题,请参考以下文章