TDSQL数据库工程师培训实战教程
LSM-Tree性能的衡量主要考虑三类因素:空间放大、读放大和写放大。
第一类因素是空间放大(已报名底部评)。在LSM-Tree中所有写操作都是顺序追加写,数据的更新操作则是通过创建一个新的空间来存储新值,即out-place update。与此同时,因为旧值不会立即被删除,因此会占用部分空间。实际上这部分冗余数据占用空间的大小要远大于有效数据本身,这种现象被称为“空间放大”。LSM-Tree会利用compaction操作来清理旧数据从而降低空间放大。
第二类因素是读放大。在LSM-Tree、B+树等外存索引结构中,进行读操作时需要按从上到下的顺序一层层去读取存储节点,如果想读一条数据,就会触发多次操作,即一次读操作所读到的数据量实际上要远大于读目标数据本身,从而影响读性能,这种现象被称为“读放大”。
第三类因素是写放大。在LSM-Tree中,compaction操作会将多个SST文件反复读取,合并为新的SSTable文件后再次写入磁盘,因此导致一条kv数据的多次反复写入操作,由此带来的IO性能损失即写放大。