《DDIA》存储与索引
仅追加日志
搜索方式:扫描
优化搜索:索引——附加结构,元数据,需同步更新
索引方式:hash,每个段一个
优化存储:合并段,只保留key对应最新值
其他:删除:标记删除
崩溃恢复:重建索引 || 保存恢复
优势:顺序写磁盘速度
并发与崩溃恢复简单,不必考虑覆盖值崩溃
局限:hash表需放入内存(随机IO),解决hash冲突逻辑复杂
范围查询效率不高
SST排序字符串表
高效合并:归并在磁盘进行
稀疏索引,定位区间后扫描
内存表排序,到达阈值写入磁盘
查找顺序:内存,磁盘新段,旧段
避免奔溃内存表丢失:日志记录内存表内容,内存写入磁盘后丢弃
优化
不存在的key:Bloom过滤器
访问频率预测分段(gc)
优点:连续写入,范围查询
B树
保持按键排序的键值对
数据库分解为固定大小的块||页,一次读写一个页面(用地址或位置标示,允许相互引用)
中间节点:保存页面引用与key
维护:分裂与合并
崩溃恢复:WAL
并发写:更新页面时⽤锁存器(latches)(轻量级锁)保护树的数据结
构来完成。
优化:
写时复制代替覆盖页面,创建父页面新版本
不存储所有健,存储范围
布局树,使得叶⼦⻚⾯按顺序出现在磁盘中,维持不便
额外的指针已添加到树中。例如,每个叶⼦⻚⾯可以在左边和右边具有对其兄弟⻚⾯的引⽤,顺序扫描无需回溯。
问题:写放大:多次写入
碎片:
维护:LSM压缩,b树维护节点
键范围上使⽤锁的事务隔离
浙公网安备 33010602011771号