随笔分类 - 从零实现KV存储
摘要:数据读写流程 在bitcast论文中,想要获取内存中存储的数据,我们首先得获取索引数据,在索引数据中获取到文件id以及数据存储所在位置,然后根据这些信息去读取文件内容。 所有我们在进行写数据时也得有两步,第一步将key value信息持久化到文件中,第二部是将索引信息保存到内存中。 流程如下图所示
阅读全文
摘要:内存设计 根据之前论文之中所写,我们在内存中需要存储一份key所对应value的映射位置便于以后读出,在内存中存储的数据结构有许多,例如hash、跳表和b tree等。 在教程中我们使用的是b tree便于以后很方便的遍历key。 数据结构的话直接拿现成的包直接用就行了 btree库: https:
阅读全文
摘要:论文地址: https://riak.com/assets/bitcask-intro.pdf bitcask实例 按目录来划分实例,保证只有一个实例能对该目录进行读写操作,实例下有多个文件,有一个活跃数据文件,多个旧的数据文件,当活跃文件写入到达阈值时会变为旧的数据文件并创建一个活跃数据文件,活跃
阅读全文
摘要:KV数据库是以二元组的方式对数据进行存储,一个Key对应着一个Value,我们熟悉的Redis就是这样对数据进行存储的。但是与我们将要实现的数据库不同之处在于,redis是基于内存的方式来存储数据的,虽然它也有持久化策略,但是它本质上还是基于内存来进行设计的,而我们实现的数据库是会将数据持久化到硬盘
阅读全文