博客/

【运维 Pro】时序场景实践与原理 - 1. 分布与分区

2023-07-31 · 徐福贵
 

【运维Pro】: 是由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识,我们更希望能够通过介绍这些知识背后的原理,让大家和我们一起感知数据库的美妙。

摘要

有别于其它场景,时序场景中的数据、查询都有着更为明显的特征;也因此,YMatrix 可以针对这些特征进行深度优化,最终带来出色的性能表现。

然而在时序场景中使用 YMatrix 时,会发现不同的使用方式有时会带来明显的性能差异;究其原因,只有针对时序场景精心设计,才能最大的发挥 YMatrix 在时序场景的性能优势。

我们会从 YMatrix 在时序场景中的最佳实践出发,深入逻辑和原理,一起讨论我们做什么、如何做、为什么。

01. 准备知识

作为本系列的第一篇文章,我们先简单介绍一些准备知识。

什么是时序数据

简单来说,时序数据就是: 设备标识 + 时间戳 + 指标 * N 。

以一个传感器记录的温度数据作为简单的例子:

![](https://img.ymatrix.cn/ymatrix_home/640 (1)_1699338816.png)

  1. 设备标识:1 或多个字段组成的设备唯一标识

  2. 时间戳:指标采集时刻的时间戳

  3. 指标:设备采集到的许多不同的指标值

关于时序场景和时序数据的更多介绍,可以阅读 YMatrix 官方文档。(时序数据模型:https://ymatrix.cn/doc/5.0/datamodel/what_is_time-Series_datamodel

使用 MARS3 存储引擎创建分区表

通常的,在时序场景会使用分区表进行存储。相比较其他数据库,YMatrix 针对时序场景进行了全方位优化,拥有诸多优势。这里我们以最新的 MARS3 存储引擎为例(其他存储类型也可参考),初步介绍如何针对使用场景创建表,以及其背后的基础逻辑。

MARS3 是在 YMatrix 5.1 中发布的最新存储引擎,相比 MARS2, 提供了数据更新与删除功能,并支持增删列,及 MVCC 机制,在 AP 和 TP 场景下都有明显的性能提升。

对应上面的例子,我们可以这样创建表:

![](https://img.ymatrix.cn/ymatrix_home/截屏2023-11-07 下午2.35.23_1699338940.png)

针对时序场景,在创建表时,除了数据对应的字段类型,我们还需要重点关注和理解两个基础的问题:

02. 如何选择分布键

在 YMatrix 中,一张表的数据会根据分布键和分布算法分散在不同节点上。

当执行查询时,如果涉及的数据均匀的分布在所有计算节点上,那么负载就会平均分配到每个节点上,自然能在并行执行时更充分的利用硬件资源,达到最佳性能表现。

反之,如果查询涉及的数据分布不均,那么执行查询时,就会出现数据量大的节点负载大,数据量小的节点负载小的问题;负载分布不均就意味着一些节点的资源未能充分利用,最终性能表现就可能不达预期。

因此,我们选择表的分区键,基本原则是让查询时涉及的数据尽可能均匀分布至各个节点上,数据分布越均匀,查询性能就越好。

要达到这一目的,首先需要理解时序场景查询的特点。

通常来讲,时序场景查询的条件均包含 时间戳(和设备标识 )的限定条件,比如:

  1. 某一时刻,所有设备的某个指标的均值 。