1.磁盘IO
https://tech.meituan.com/2017/05/19/about-desk-io.html
PageCache BufferCache
2.顺序IO与随机IO
https://www.zhihu.com/question/370950509
BTrees
写:将要写的block加载到内存,然后更新放回PageCache或者同步刷盘;当要写的数据位于不同block时,就涉及多个页,需要随机写
读:首先加载根节点对应的block,然后不断找对应的子节点,每次换页都需要加载对应的数据到内存,但是整体几乎是顺序读,对范围查询友好
LSM+SSTable
写:先写到memtable,然后到达阈值写到磁盘(这是一整块写,顺序写就够了),多个SSTable的合并会造成读写放大,但是合并相当于两段有序数据的合并,时间复杂度是o(n)
读:先判断在不在内存的memtable,取决于内存的数据结构一般很快;不在的话,按照层级去读SSTable,先读Footer,得到Index和Filter,利用Filter过滤不存在的大部分情况,剩下的数据通过Index找到区间,然后读出相关数据;SSTable是允许key重复的,利用时间的most recent原则拆分数据
