深入探讨LSM Compaction机制
compaction策略
compaction的主要作用是数据的gc和归并排序,是lsm-tree系统正常运转必须要做的操作,但是compaction任务运行期间会带来很大的资源开销,压缩/解压缩、数据拷贝和compare消耗大量cpu,读写数据引起disk I/O。compaction策略约束了lsm-tree的形状,决定哪些文件需要合并、任务的大小和触发的条件,不同的策略对读写放大、空间放大和临时空间的大小有不同的影响,一般系统会支持不同的策略并配有多个调整参数,可根据不同的应用场景选取更合适的方式。
基础概念
读放大
每次读请求带来的读盘次数
写放大
每写1byte数据带来n bytes的数据写盘,写放大为n。本质上写放大需要跟全局有序做权衡,对序要求越高的系统写放大就会越严重,B-Tree系列是随时有序的代表,写放大也更为严重,而LS