/rioDB

一个借鉴 BitCask 的 kv 数据库,正在完善中

Primary LanguageC++

kvsvr, 以 bitmask 为基本原型,日志型数据文件,实现持久化


文件定义

  • core.cc : 包括了基本的库,还有一些常量的定义
  • log: 日志的文件夹,其中 log.cfg 是日志的配置文件
  • DB: 存放数据的文件夹,每个数据文件的命名方式为dbfile_xxx.db
  • config.cc: 加载 config.json 的配置文件,暂时还没有用到
  • json.hpp: nlohmann.json,一个解析 json 的 c++库,只需要 include 该文件即可
  • logging.hpp: boost 日志库
  • fileHandle.cc: 对文件的操作进行了封装
  • dbFile.cc: 以组合的方式包括了 filehandle.cc,进一步封装以适用于数据库对文件的操作
  • DMS.cc : 核心文件,定义了对数据库的查询、插入、删除、合并与加载数据文件的操作。
  • testxxx.cc: 一些自己定义的测试文件

操作定义

  • 插入操作:分为活跃文件空间足够和不足够时两种情况。插入与插入操作之间互斥。第二种插入操作与所有操作互斥,且该操作优先
  • 查询操作:查询与插入互斥,查询与查询之间不互斥。
  • 删除操作:删除操作本质上是插入操作,所以同插入操作。
  • 合并操作:如果要查数据在活跃文件,合并与查询不互斥;在旧文件则合并与查询互斥。合并与插入第一种情况不互斥。
  • 加载数据操作:当数据库文件的大小和当前定义的 db 文件最大大小一致时可以加载。可以分多种情况实现当大小不一致时的加载问题。

record 结构


RecordHeader
key
value
0x20

key 以 ‘\0’结尾 value 以'\0'结尾 0x20 是 record 结束符

dbfile 结构


record
record
...
record
0x20

0x20 是文件末尾结束符标志