关于数据库:MatrixDB-43-新特性从持续聚集说起

55次阅读

共计 1988 个字符,预计需要花费 5 分钟才能阅读完成。

随着时序数据库近几年越来越火,MatrixDB 作为一款备受业内关注的国产时序数据库也不停的更新迭代。4.3 版本在兼容性及性能上失去晋升外,还新增 在时序场景中能达到疾速查问的 ——“继续汇集”。

1. 简介

在时序场景中,汇集查问个别是基于较大量级的数据汇合,对其进行演绎分组聚合运算,是一种绝对耗时的查问类别,多用于剖析场景。时序场景对汇集查问的需要也越来越多,同时对汇集查问的响应工夫要求也越来越高。

因而,在 MatrixDB 4.3 版本中推出“继续汇集”,一种能疾速响应汇集查问的机制。

2. 继续汇集应用办法

  1. 创立数据表
  2. 基于数据表创立继续汇集视图
  3. 向数据表插入数据
  4. 查问继续汇集视图
# 创立数据表
CREATE TABLE con_view_test_t1(
    c1 int,
    c2 int
)
DISTRIBUTED BY(C1);

#创立继续汇集视图
CREATE VIEW con_view1 WITH (CONTINUOUS) AS
    SELECT c1, COUNT(*), SUM(c2) FROM con_view_test_t1 GROUP BY c1;
    
#向原表插入数据
INSERT INTO con_view_test_t1 SELECT 1, generate_series(1, 10);
INSERT INTO con_view_test_t1 SELECT 2, generate_series(1, 100);
INSERT INTO con_view_test_t1 SELECT 3, generate_series(1, 1000);

#查问继续汇集视图
SELECT * FROM con_view1 ORDER BY c1;
 c1 | count |  sum
----+-------+--------
  1 |    10 |     55
  2 |   100 |   5050
  3 |  1000 | 500500
(3 rows)

从如上演示能够看到,继续汇集视图存储的是“创立汇集时聚合 SQL 语句汇集过的数据”,查问视图能够失去汇集后的后果,缩小运算量。

3. 实现办法

数据同步

一般视图只做查问重写,并不存储理论数据,而继续汇集所创立的视图相当于物化视图,是用于存储物理数据。所以,每次向原表插入新数据时,要同步到物化视图。

数据同步在内存中进行,为了保证数据插入的延时不会受同步到物化视图过程的影响,在实现时额定减少了过程来异步解决。

数据通过共享内存同步到后盾过程,后盾过程并行实现数据写入,以此升高时延。

存储引擎

继续汇集利用在汇集操作场景,通常都是按列分组后,做 SUM、COUNT、MAX、MIN 等汇集操作,数据同步到物化视图后,须要非凡的数据结构做优化解决,否则和从原表扫描数据做统计没有任何区别。

优化的实质是对已有的汇集后果做合并,缩小数据汇合数量;对增量数据做增量合并。要做合并,则须要数据有序存储。所以,继续汇集存储引擎核心技术能够演绎为:排序和归并。

为了存储的有序性,继续汇集在实现上应用了自研的存储引擎,和 Heap 相似,是将数据划分为 Block;不同的是,Block 外部的数据是有序存储的,Block 之间也通过链表形成了有序汇合。

基于如上存储,后盾过程会在满足触发条件时,对排序后值雷同的数据做归并,归并后存储数据量缩小,查问性能晋升。

汇集视图中,数据的归并是在后盾进行的,执行器在执行对汇集视图的查问时,并不仅仅是简略的扫描,还要做数据再汇集。再汇集数据量会随着归并逐步缩小。

汇集数据分布

MatrixDB 是分布式数据库,数据扩散在 segment 上存储,继续汇集的数据同步与排序归并也是在 segment 上独立实现,不存在跨节点的互通,也就是说物化视图的数据分布与原数据表的数据分布雷同。

在对视图进行查问的时候,每个 QE 实现汇集后果后,到 QD 节点再做二阶段汇集。

保护办法

MatrixDB 提供对继续汇集进行保护的 UDF:

ANALYZE 物化视图,能够更新统计信息,有利于优化器做计算:


VACUUM 物化视图,能够清理 Dead tuple,使空间反复利用;第二个参数为 true 会重建表文件、缩小存储空间:


重建物化视图,实用于源数据表做了更新删除,从新全量同步数据的场景:

4. Q&A

  1. 物化视图的数据与源表是实时同步的吗?

是的,源表插入数据提交后,即可从物化视图查问到。

  1. 继续汇集能够保障 ACID 吗?

能够,物化视图中的数据与原表数据应用雷同的事务 ID。

  1. 如何解决更新删除?

原表的更新删除以及 DROP 并不会体现在继续汇集视图中,但反对 upsert 更新和非空最新值 last_not_null 聚合。

  1. 继续汇集对窗口函数无效吗?

临时不反对窗口函数。

  1. 继续汇集是否反对 partition 表?

反对。

  1. 继续汇集是否反对多表汇集?

不反对。

  1. 一张表能够定义多个继续汇集吗?

反对。

去官网下载, 体验最新 MatrixDB 4.3 版本!

MatrixDB – 下载

原文链接

本文为 yMatrix 原创内容,未经容许不得转载。

欲了解更多超交融时序数据库相干信息,请拜访“yMatrix”官方网站

正文完
 0