Go存储引擎相关资料汇总

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

背景

​ 最近逛知乎的时候看到了这个问题“Go语言如何写数据库”。说来我业余时间在这个领域有一些时间精力的投入了所以想回答一下。我投入的方向是存储引擎方面所以这篇文章主要是总结一下我看过的一些比较好的Go存储引擎的资料。罗列一些论文开源项目。读者可以自行去了解。

image-20230121161042677

什么是存储引擎

​ 简单来说存储引擎就是存放和读取用户数据的地方对于持久化的存储引擎而言数据的归宿是非易失性的存储介质通俗意义上来说就是磁盘所以该以什么形式组织和存储数据这就是存储引擎设计的艺术所在。这一块涉及到和操作系统打交道(主要是IO操作)还有如何更快的处理数据这里涉及到并发事物如何处理另外考虑空间局部性和时间局部性原理这里涉及到对数据缓存的设计。整体来说scope还是比较大的钻研空间比较广。下面推荐的是磁盘IO相关的文章和数据存储相关的视频资料。而这篇文章主要罗列的是HashB+TreeLSM-Tree三种存储引擎的资料。

  1. 磁盘IO那些事
  2. 数据存储与检索(详解b+树存储引擎(innodb、boltdb、buntdb等)、lsm树存储引擎(bitcask、moss、pebble、leveldb等)

1. Hash

​ Hash存储引擎相对实现比较简单这里就放在第一个讲了。Bitcask是hash存储引擎的典型实现而Bitcask在go中有两个实现nutsdb和rosedb而nutsdb是我去年开始参与维护的tiny-bicask是我写的一个简单版bitcask实现目的是方便nutsdb社区小伙伴快速上手项目。下面是我推荐的bitcask相关资料和项目

  1. Bitcask paper 论文地址。
  2. nutsdb github地址。
  3. rosedb github地址
  4. tiny-bitcask github地址
  5. nutsdb设计与实现 Go夜读分享
  6. rosedb 设计与实现Go夜读分享

2. B+Tree

​ B+ Tree是大家耳熟能详的一种存储引擎架构大名鼎鼎的MySQL innodb存储引擎就是基于B+ Tree实现的。在Go中Boltdb是B+Tree的典型实现其中著名的分布式存储etcd底层用的是boltdb存储元数据。下面是B+Tree存储引擎的一些相关资料

  1. Boltdb github代码地址。
  2. 自底向上分析 BoltDB 源码 电子书。
  3. Google B-Tree实现 内存版的B-tree实现。

3. LSM-Tree

LSM-Tree的典型代表有leveldb和rocksdb目前主流的nosql数据库底层采用的存储引擎一般都是基于LSM-Tree实现的。而在go中有goleveldb和badgerdb两个实现而badger是基于论文WiscKey实现的Key Value分离的LSM架构存储。

  1. LSM paper 论文地址。
  2. Wisckey paper 论文地址。
  3. goleveldb github地址
  4. badgerdb github地址
  5. leveldb hand-book leveldb源码分析。

总结

其实要怎么写数据库我觉得这个问题还是太宽了但是如果你对这方面确实感兴趣可以先从学习相关理论并且选一些开源项目去研究源码必要时候可以参与到开源项目的开发之中。没有比实际动手写更好的学习方式了。另外在后面的学习过程中还会有更多优秀的学习资料所以打算把这些资料整理到github项目里面后面方便维护https://github.com/elliotchenzichang/go-database-material大家对这方面感兴趣的话可以star和提PR感谢。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go