我遇到了一篇来自 VictoriaMetrics 的 研究论文
MergeSet
。
它说
MergeSet 是一个简化的单级 LSM 树,由 VictoriaMetrics [6],连接标签和发布 ID 一起在一个键中,并且自然地形成了发布列表,因为 由 LSM 树维护的排序顺序。
虽然我尝试从虚拟机读取源代码,但不确定
MergeSet
是什么。
对于普通的LSM树,每个元素都是按键排序的键值对。 如果
MergeSet
遵循这个范式,那么我的问题如下:
MergeSet
是否将每个标签键值对与相关的TSID连接起来并将其作为元组的键存储在MergeSet.table
中?MergeSet.table
值代表什么?如果不是,我是否应该将
MergeSet
视为受LSM树启发并利用磁盘容量的(部分)排序字符串集?
github.com/VictoriaMetrics/VictoriaMetrics/lib/mergeset包实现了LSM类似的数据结构,具有以下属性:
TableSearch结构提供
O(log(N))
搜索和 O(1)
前缀扫描排序字节切片。mergeset
被VictoriaMetrics用来存储各种索引,统称为indexdb
。这些索引包括以下条目:
metricName -> metricID
,当将摄取的原始样本存储到VictoriaMetrics时,它允许通过时间序列的规范名称(又名metricID
)来定位时间序列(又名
meteicName
)的内部ID。时间序列的规范名称包括指标名称加上按特定顺序排序的时间序列的所有标签。
metricID -> metricName
,它允许定位指标名称以及具有给定内部 id 的时间序列的所有标签。
label=value -> metricID
,允许使用给定的 label=value
标签定位时间序列。这些条目称为倒排索引,它们用于通过给定的标签过滤器快速搜索时间序列。
VictoriaMetrics 如何将这些条目存储在仅适用于排序字节切片的
mergeset
中?它将条目编组到字节片中,就像可以通过前缀扫描搜索条目一样。它还为每个条目类型预先添加带有单独前缀的字节片,因此它们不会相互冲突。请参阅当前支持的前缀。