Hello 大家好,rosedb 目前正处于重构阶段,想要征求一些大家的意见和建议,欢迎大家来畅所欲言。
对于前面的版本,设计上较为简单,但是也存在很多的问题,这次 rosedb V2 版本的重构主要分为三个部分。
一是磁盘文件的布局将会发生一些改变,之前是按照一个偏移去追加写数据到文件中,这样存在的一个问题是,如果 value 较小,那么在重启加载数据文件时,需要的磁盘 IO 次数较多,严重影响效率。
这次的重构将会改变数据文件的布局,参考了 LSM Tree 中的 Write Ahead Log 的设计,将一个文件切分成了多个 block,每个 block 固定 32 KB 的大小,读取的时候将会直接一次性读取一个 block,减少了磁盘 IO。
并且加上了 block 缓存,在读取的时候,如果命中缓存,将直接避免了磁盘 IO,从内存中就能直接获取到数据,极大提升了数据读取的性能。
wal 这部分其实可以单独拿出来,因为这是一个通用的组件,于是我新建了一个公开的项目,大家感兴趣的可以学习研究,也可以直接拿去使用。
项目地址:https://github.com/rosedblabs/wal
二是,对于内存索引,目前还在调研阶段,之前采用了 Adaptive Radix Tree,读写效率非常高,但是迭代器的功能较简单,目前主要调研的数据结构有这几种:
1、https://github.com/hashicorp/go-immutable-radix
这是 HashiCorp 的一个开源库,也是基数树的实现,迭代器也很丰富,并且有 Hashicorp 的背书。
2、https://github.com/google/btree
Google 开源的 Golang BTree 库。
3、https://github.com/plar/go-adaptive-radix-tree
自适应基数树索引。
三是,对于 Redis 数据结构和协议的支持,将会从 rosedb 中拆分出来,单独形成一个项目,这样方便去接入不同的存储引擎,比如 rosedb、boltdb、badger 等等。
比如磁盘文件布局的优化,内存索引结构的选择,基础功能的补充,文档的完善,使用体验的优化等等,各方面都可以提出自己的想法和建议。
大家可以直接留言,或者私信我都可以。
最后附上 rosedb 项目的地址:
https://github.com/rosedblabs/rosedb