本文主要内容来自于《数据密集型应用系统设计》 第三章,内容对我很有启发,所以分享给大家,推荐看原作。
背景
存储引擎存在着两个主要流派:
- 日志结构流派,只允许追加式更新/删除文件,不会修改已写入的文件,Bitcast,SSTables,LSM-Tree,LevelDB,RocksDB,Cassandra,HBase,Lucene 等属于此类
- 原地更新流派,将磁盘视为可以覆盖的一组固定大小的页。B-tree 就是这一流派的典型代表,已用于所有主流关系型数据库,以及大量的非关系数据库
大部分人已经对原地更新流派中 B-tree 已经比较熟悉了,但对日志结构流派并不是很了解,本文带领大家了解下其演化过程及 LSM-tree 与 B-tree 的对比
演化过程
1. 一个最简单的数据库
基本原理
由两个 Bash 函数实现:
db_set(){
echo "$1,$2" >> database
}
db_get(){
grep "^$1," database | sed -e "s