1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ZNBase-zn-kvs

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
总体架构设计.md 2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
inspur Отправлено 03.03.2021 04:39 57415b8

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. 代码实现

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ZNBase-zn-kvs.git
git@api.gitlife.ru:oschina-mirror/ZNBase-zn-kvs.git
oschina-mirror
ZNBase-zn-kvs
ZNBase-zn-kvs
develop