VictoriaMetrics中MergeSet工作原理及相关技术疑问
问题背景
从相关研究论文中了解到VictoriaMetrics的MergeSet是简化的单层LSM树,将标签与posting ID(TSID)拼接为键,借助LSM树的有序性形成倒排列表。查阅VM源码后仍有以下疑问:
- MergeSet是否将每个标签键值对与关联TSID拼接后作为
MergeSet.table中元组的键? - 若标签键值对和TSID都嵌入键中,
MergeSet.table的值代表什么? - 若不遵循普通LSM树的键值对范式,是否应将MergeSet视为受LSM树启发、利用磁盘存储的(部分)有序字符串集合?
解答
MergeSet的键结构
MergeSet确实会将标签键值对(经过VM特定编码压缩,保证字典序排序)与对应的TSID拼接后作为MergeSet.table的键。这里的“拼接”不是简单的字符串拼接,而是先对标签键值对进行紧凑编码(比如将key=value格式的标签转换为符合排序规则的定长/变长编码),再追加固定长度的TSID,最终形成全局有序的键。这种设计让相同标签组合的TSID在键空间中连续排列,天然构成倒排列表,方便快速定位某个标签组合对应的所有时间序列。MergeSet的值字段意义
当标签键值对和TSID都嵌入键中时,MergeSet.table的值字段仅作为占位符,无实际业务意义。MergeSet的核心逻辑完全依赖有序键集合实现倒排索引:查询时只需扫描匹配标签前缀的键范围,从键中提取TSID即可,不需要读取值字段。VM这样设计是为了最大化存储效率,避免冗余数据。MergeSet的本质定位
MergeSet可以视为受LSM树启发、基于磁盘存储的有序字符串集合。它简化了传统LSM树的多层SSTable结构,仅保留单层有序存储,但继承了LSM树高效写入、范围查询的特性。它不完全遵循普通LSM树的“键-值”范式,因为值字段无实际作用,核心价值在于有序排列的键本身——通过键的有序性实现标签到TSID的倒排映射,这也是VM应对高基数标签查询优化的关键设计。
内容的提问来源于stack exchange,提问作者Xavier Z

