Segment Merging(段合并) 是分布式存储系统、搜索引擎(如 Elasticsearch/Lucene)以及数据库(如使用 LSM Tree 的 RocksDB/LevelDB)中一个非常核心的后台维护过程。 简单来说,它的作用是将多个小的、零散的数据文件(段)合并成更少、更大的文件,并在此过程中物理删除无效数据。 为了让你彻底理解,我们需要先了解背景,再解释“是什么”和“为什么”。 --- 1. 背景:为什么会有“段”(Segment)? 在 Elasticsearch、Lucene 或 HBase 等系统中,为了追求极致的写入性能,数据通常采用追加写(Append-only) 的方式。 1. 不可变性(Immutability): 数据一旦写入磁盘形成一个“段”(Segment)文件,就不能再修改。 2. 新数据产生新段: 每次有新数据写入并刷新(Flush)到磁盘时,都会生成一个新的、独立的小文件(Segment)。 3. 删除/更新是假的: 删除: 当你删除一条数据时,系统不会去修改原来的段文件,而是写一个“墓碑标记”(Tombstone)文件,记录“这条数据...