Adele——以Bitcask为模型的kv数据库

Bitcask存储模型

简介

Bitcask是一个kv存储的模型,它采用日志追加写的模式来记录数据。该模型包含两部分:内存部分和磁盘部分。我们都知道内存的读写速度是非常快的,痛点就是内存的易失性,所以我们必须将数据持久化到磁盘文件中。

如何在磁盘中高效的读写呢?首先想要高效就必须了解磁盘读取数据的方式,传统的机械硬盘中,机械臂移动到目标磁道,然后磁盘旋转,读取该盘面上的数据,数据通过数据总线进入内存。如果要读取的数据是随机散布在硬盘中,需要消耗大量磁臂和磁盘移动时间,所以磁盘的顺序读取速度远远大于随机读取速度。

基于以上,bitcask模型在内存中维护一个map,记录key值和其value值所在文件和文件中的位置等信息,外部读取时,通过内存一次性找到硬盘上的数据。在写入数据时,将数据规整为一条entry,(entry包含keysize、valuesize、key值、value值等)追加写入到文件中。之后更新内存中的map。

当硬盘存储文件过大时,将创建新文件继续追加写,之前的文件将被锁起来,只读不写。为了防止log过多,必须定时合并所有的文件,将数据更新到新的log中。

更多细节,可以google下bitcask论文或其他博文。

实现

根据以上模型指导,我实现了一个简单的kv数据库模型,后续会更新,支持其他数据结构和更多数据操作,完善为单机数据库后,再加入raft实现分区一致性,和TLV协议支持客户端与服务端。

https://github.com/k-si/Adele

跪求star OTZ


原博客:orangelsk.zone

Guess you like

Origin blog.csdn.net/weixin_43237362/article/details/121309481