196 Star 316 Fork 259

云溪数据库公司 / zb-kvs

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
总体架构设计.md 2.05 KB
一键复制 编辑 原始数据 按行查看 历史
labracy01 提交于 2021-03-03 09:39 . add design document of zn-kvs

zn-kvs design documents

(26/2/2021)

0. 为什么做zn-kvs?

  • 近年来,随着动态随机存储器(DRAM)容量的上升和单位价格的下降,使大量数据 在内存中的存储和处理成为可能。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。
  • 现有内存数据库存储方式是将分配的空间内分页,每页内顺序写入,没有考虑CPU Cache命中率的问题。

1. 设计原则

  • 基于索引与数据分离存储的思想.索引常驻内存。数据可以根据内存容量,将部分存储到持久化存储设备中。
  • 提升cpu cache命中率,通过数据块的重构(拆解、扩容、缩容)将key相邻的kv数据在内存空间中也相邻。提升key值遍历的速度。
  • 异步落盘机制,保证平滑的IO速率,消除IO瓶颈。
  • 基于ART索引的检索机制,保证数据查询的速度。

2. 总体架构图

  • 插入流程说明

architecture

KV数据插入数据库时,按照顺序依次写入WAL、内存块、索引中。

  • WAL:数据库日志,用于保证数据不丢失。
  • 内存块:分配存储KV数据的内存区域,并且将数据复制到分配的内存区域中。
  • 索引:将KV指针挂载到ART树,对于key的多个版本排序的双向链表存储。

异步刷盘线程,维护所有内存块的队列,队列按照内存块的上次刷盘时间排序。线程从队列取内存块,并将内存块增量的kv数据进行落盘,追加到文件末尾或形成新的SST文件。

3. 模块机制设计说明

4. 代码实现

C++
1
https://gitee.com/ZNBase/zn-kvs.git
git@gitee.com:ZNBase/zn-kvs.git
ZNBase
zn-kvs
zb-kvs
develop

搜索帮助