共计 1988 个字符,预计需要花费 5 分钟才能阅读完成。
随着时序数据库近几年越来越火,MatrixDB 作为一款备受业内关注的国产时序数据库也不停的更新迭代。4.3 版本在兼容性及性能上失去晋升外,还新增 在时序场景中能达到疾速查问的 ——“继续汇集”。
1. 简介
在时序场景中,汇集查问个别是基于较大量级的数据汇合,对其进行演绎分组聚合运算,是一种绝对耗时的查问类别,多用于剖析场景。时序场景对汇集查问的需要也越来越多,同时对汇集查问的响应工夫要求也越来越高。
因而,在 MatrixDB 4.3 版本中推出“继续汇集”,一种能疾速响应汇集查问的机制。
2. 继续汇集应用办法
- 创立数据表
- 基于数据表创立继续汇集视图
- 向数据表插入数据
- 查问继续汇集视图
# 创立数据表
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
- 物化视图的数据与源表是实时同步的吗?
是的,源表插入数据提交后,即可从物化视图查问到。
- 继续汇集能够保障 ACID 吗?
能够,物化视图中的数据与原表数据应用雷同的事务 ID。
- 如何解决更新删除?
原表的更新删除以及 DROP 并不会体现在继续汇集视图中,但反对 upsert 更新和非空最新值 last_not_null 聚合。
- 继续汇集对窗口函数无效吗?
临时不反对窗口函数。
- 继续汇集是否反对 partition 表?
反对。
- 继续汇集是否反对多表汇集?
不反对。
- 一张表能够定义多个继续汇集吗?
反对。
去官网下载, 体验最新 MatrixDB 4.3 版本!
MatrixDB – 下载
原文链接
本文为 yMatrix 原创内容,未经容许不得转载。
欲了解更多超交融时序数据库相干信息,请拜访“yMatrix”官方网站