网站首页 > 文章精选 正文
随着时序数据库近几年越来越火, 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:
- matrixts_internal.analyze_continuous_view(rel REGCLASS)
ANALYZE物化视图,可以更新统计信息,有利于优化器做计算: SELECT
matrixts_internal.analyze_continuous_view('cv1');
- matrixts_internal.vacuum_continuous_view(rel REGCLASS, full BOOL)
VACUUM物化视图,可以清理Dead tuple,使空间重复利用;第二个参数为true的话会重建表文件、减少存储空间: SELECT
matrixts_internal.vacuum_continuous_view('cv1', true);
- matrixts_internal.rebuild_continuous_view(rel REGCLASS)
重建物化视图,适用于源数据表做了更新删除,重新全量同步数据的场景: SELECT
matrixts_internal.rebuild_continuous_view('cv1');
4.Q&A
1.物化视图的数据与源表是实时同步的吗?
是的,源表插入数据提交后,即可从物化视图查询到。
2.持续聚集可以保证ACID吗?
可以,物化视图中的数据与原表数据使用相同的事务 ID。
3.如何处理更新删除 ?
原表的更新删除以及 DROP 并不会体现在持续聚集视图中,但支持 upsert 更新和非空最新值 last_not_null 聚合。
4.持续聚集对窗口函数有效吗 ?
暂时不支持窗口函数。
5.持续聚集是否支持 partition 表?
支持。
6. 持续聚集是否支持多表聚集?
不支持。
7.一张表可以定义多个持续聚集吗?
支持。
去官网下载
体验最新 MatrixDB 4.3 版本!
原文链接:MatrixDB 4.3 新特性:从“持续聚集”说起
本文为 yMatrix 原创内容,未经允许不得转载。
欲了解更多超融合时序数据库信息,请访问 “MatrixDB - 超融合时空数据库” 官方网站
- 上一篇: UML的视图
- 下一篇: 如何画出一张合格的技术架构图?
猜你喜欢
- 2025-04-28 怎么进行数据整合?必要步骤有什么?
- 2025-04-28 一文讲解业务系统软件架构设计核心内容和逻辑
- 2025-04-28 MySQL数据库语句
- 2025-04-28 存储系列二:块存储、文件存储、对象存储、分布式文件存储
- 2025-04-28 Linux内核物理页面page结构分析
- 2025-04-28 如何画出一张合格的技术架构图?
- 2025-04-28 UML的视图
- 2025-04-28 VMware管家三大拓扑视图,直观呈现虚拟化运行状态
- 2025-04-28 SpringMVC流程及源码分析
- 2025-04-28 视图计算背后的技术架构思考
- 04-28内网IP与外网IP
- 04-28打开文档提示“office你的许可证不是正版”该怎么办?
- 04-28腾讯云国际站:如何通过腾讯云服务器搭建私有网络?
- 04-28今天我们聊聊什么是ip地址,什么又是公网和私网
- 04-28内网测速平台
- 04-28什么是IP地址,IP地址详解
- 04-28熟悉电脑地址,快速配置上网
- 04-28外网利用ssh隧道访问内网
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)