MergeSet 在 VictoriaMetrics 中如何工作?

问题描述 投票:0回答:1

我遇到了一篇来自 VictoriaMetrics 的 研究论文

MergeSet

它说

MergeSet 是一个简化的单级 LSM 树,由 VictoriaMetrics [6],连接标签和发布 ID 一起在一个键中,并且自然地形成了发布列表,因为 由 LSM 树维护的排序顺序。

虽然我尝试从虚拟机读取源代码,但不确定

MergeSet
是什么。

对于普通的LSM树,每个元素都是按键排序的键值对。 如果

MergeSet
遵循这个范式,那么我的问题如下:

  1. MergeSet
    是否将每个标签键值对与相关的TSID连接起来并将其作为元组的键存储在
    MergeSet.table
    中?
  2. 如果标签键值对和 TSID 都嵌入到键中,那么
    MergeSet.table
    值代表什么?

如果不是,我是否应该将

MergeSet
视为受LSM树启发并利用磁盘容量的(部分)排序字符串集?

database time-series victoriametrics
1个回答
0
投票

github.com/VictoriaMetrics/VictoriaMetrics/lib/mergeset包实现了LSM类似的数据结构,具有以下属性:

  • 它通过 Table.AddItems 方法按排序顺序存储不透明字节切片。
  • 它以最大 64 kb 的块形式处理存储的字节片。每个块在存储到磁盘之前都会被压缩。这减少了磁盘 IO 和磁盘空间的使用。
  • 它将相似大小的部件在后台合并为更大的部件,以控制部件的数量。这提高了压缩率和查询速度。
  • 它通过
    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
中?它将条目编组到字节片中,就像可以通过前缀扫描搜索条目一样。它还为每个条目类型预先添加带有单独前缀的字节片,因此它们不会相互冲突。请参阅当前支持的前缀

© www.soinside.com 2019 - 2024. All rights reserved.