VictoriaMetrics是一个疾速的工夫序列数据库。它反对Prometheus PromQL查问,其具备以下突出特点:
- 对高基数数据具备十分高的写入性能。无关详细信息,请参见本文。
- 对大量数据时具备很高的查问性能。无关详细信息,请参见本文和此电子表格。
- 对工夫序列数据具备高压缩率。
- 在线即时快照,而不会影响数据库操作。
让咱们钻研一下VictoriaMetrics反对下的即时快照如何工作。
简略介绍ClickHouse
VictoriaMetrics将数据存储在相似于ClickHouse的 MergeTree表 数据结构中。它是用于剖析数据和其余事件流的最快的数据库。在典型的剖析查问上,它的性能要比PostgreSQL和MySQL等传统数据库高10到1000倍。这意味着单个ClickHouse服务器能够代替大量的惯例数据库。
ClickHouse的速度如此之快,这要归功于其MergeTree表引擎的架构。
什么是 MergeTree?
MergeTree是面向列的表引擎,其建设在相似于Log Structured Merge Tree 的数据结构上。 MergeTree属性:
- 每列的数据别离存储。因为不须要在读取和跳过其余列的数据上破费资源,因而缩小了列扫描期间的开销。因为各个列通常蕴含类似的数据,因而这也进步了每列的压缩率。
- 行按"主键"排序,该主键能够蕴含多列。主键没有惟一的束缚--多行可能具备雷同的主键。这样能够通过主键或其前缀疾速进行行查找和范畴扫描。另外,因为间断排序的行通常蕴含类似的数据,因而能够进步压缩率。
- 行被分成中等大小的块。每个块由每个列的子块组成。每个块都是独立解决的。这意味着在多CPU零碎上具备靠近完满的可扩展性--只需为所有可用的CPU内核提供独立的块即可。能够配置块大小,然而倡议应用大小在64KB-2MB之间的子块,因而它们适宜CPU缓存。因为CPU缓存拜访比RAM拜访快得多,因而能够进步性能。另外,当必须从具备多行的块中仅拜访几行时,这会缩小开销。
- 块合并为"parts"。这些parts相似于LSM树中的SSTables。 ClickHouse在后盾将较小的parts合并为较大的parts。与标准的LSM不同,MergeTree没有严格的part大小。合并过程进步了查问性能,因为每次查问都查看了较少的parts。另外,合并过程缩小了数据文件的数量,因为每个局部都蕴含与列数成比例的固定数量的文件。Parts合并还有另一个益处--更好的压缩率,因为它能够挪动更靠近已排序行的列数据。
- Parts通过"分区"分组到分区中。最后,ClickHouse容许在"Date"列上创立每月分区。当初,能够应用任意表达式来构建分区键。分区键的不同值导致不同的分区。这样能够疾速不便地按分区进行数据存档/删除。
接下来真正介绍VictoriaMetrics中的即时快照。
VictoriaMetrics中的即时快照
VictoriaMetrics将工夫序列数据存储在相似MergeTree的表中,因而它受害于上述性能。此外,它还存储了倒排索引,以便通过给定的工夫序列选择器进行疾速查找。倒排索引存储在mergeset中--一种数据结构,该数据结构建设在MergeTree思维的根底上,并针对倒排索引查找进行了优化。
MergeTree还有一个下面没有提到的重要属性--原子性。这意味着:
- 新减少的parts要么呈现在MergeTree中,要么无奈呈现。 MergeTree从不蕴含局部创立的parts。合并过程也是如此--parts要么齐全合并为新part,要么无奈合并。 MergeTree中没有局部合并的parts。
- MergeTree中的parts内容永不变。Parts是不可变的。合并到更大的Part后,才能够删除它们。
这意味着MergeTree始终处于统一状态。
许多文件系统都提供诸如硬链接之类的"怪兽"。硬链接文件共享原始文件的内容。它与原始文件没有区别。硬链接不会在文件系统上占用额定的空间。删除原始文件后,硬链接文件将成为“原始文件”,因为它成为指向原始文件内容的惟一文件。无论文件大小如何,都会立刻创立硬链接。
VictoriaMetrics应用硬链接为工夫序列数据和倒排索引创立即时快照,因为它们都存储在相似MergeTree的数据结构中。它只是从原子上将所有parts的所有文件硬链接到快照目录。这是平安的,因为parts永远不会扭转。之后,能够应用任何适合的工具(例如,用于云存储的rsync或cp)将快照备份/存档到任何存储(例如,Amazon S3或Google Cloud Storage)。存档前无需进行快照压缩,因为它已蕴含高度压缩的数据--VictoriaMetrics为工夫序列数据提供了最佳的压缩率。
新创建的快照在文件系统上不占用额定的空间,因为其文件指向MergeTree表中的现有文件。即便快照大小超过10 TB也是如此!在原始MergeTree合并/删除从快照链接的局部之后,快照开始占用额定的空间。因而,不要遗记删除旧快照以开释磁盘空间。
论断
VictoriaMetrics基于ClickHouse中MergeTree表引擎的杰出构想构建了即时快照。能够随时创立这些快照,而不会在VictoriaMetrics上造成任何停机工夫或失常操作的中断。
能够在单docker镜像或单服务器二进制文件上评估快照性能。可通过以下http处理程序应用:
/snapshot/list
— 列出所有可用的快照/snapshot/create
— 创立一个新的快照/snapshot/delete?snapshot=…
— 删除指定的快照
创立的快照位于/<-storageDataPath>/snapshots
目录下,其中-storageDataPath
是命令行标记,其中蕴含VictoriaMetrics存储数据的文件系统门路。
PS: 本文属于翻译,原文