海量数据分析更快、更稳、更准。GaussDB(for|海量数据分析更快、更稳、更准。GaussDB(for MySQL) HTAP只读分析特性详解
本文作者康祥,华为云数据库内核开发工程师,研究生阶段主要从事SPARQL查询优化相关工作。目前在华为公司参与华为云GaussDB(for MySQL) HTAP只读内核功能设计和研发。
1. 引言
HTAP(Hybrid Transactional/Analytical Processing)这个词相信大家最近经常会听到,它能够同时支撑在线事务处理(On-Line Transactional Processing, 简称OLTP) 和在线数据分析 (On-Line Analytical Processing, 简称 OLAP)。令人惊喜的是,ClickHouse 作为近年来炙手可热的大数据分析系统可以通过MaterializeMySQL 引擎挂载为 MySQL 的从库,作为 MySQL 的 "协处理器"面向 OLAP 场景提供高效数据分析能力,这对解决异构数据库之间数据共享问题提供了新的途径。我们可以充分发挥 ClickHouse 的分析性能,结合 TP 类引擎如 MySQL 等提供 HTAP 能力。然而实际应用场景中 ClickHouse 仍然面临一些挑战,因此 GaussDB(for MySQL)的HTAP只读分析应运而生,除了拥有 ClickHouse 本身的极致性能外,GaussDB(for MySQL)的HTAP只读分析在 MaterilizeMySQL引擎的性能和稳定性等方面具有更优秀的表现,为提供更快更准的数据分析保驾护航。
2. 背景
大数据时代的到来,数据量急剧增长的同时用户结构也越来越多样化,这些用户处理数据时发现,仅仅是创建一个可视化报表需要经过数据的抽取 (Extract), 转换 (Transform) 和装载 (Load), 整个周期可能长达数日甚至数周。事实上,ETL 模式的优点在于能够结合数据湖等处理多源数据,低成本处理海量数据且生态较完善,当然缺点也十分明显,传统的数据仓库和数据湖等无法支持大量实时并发的更新,数据分析时效性较低。除此之外,ETL 模式应对变化的能力也相对较弱,如上游数据源发生变化(例如表结构的变化等),整个数据链的处理过程都需要做相应的修改,增加了数据维护的难度。
文章图片
如何追求实时分析呢?答案是 HTAP。HTAP 可以支持大量并发的更新且数据同步时延通常在在秒级或毫秒级,有效避免传统解决方案中数据抽取,转换和装载等繁琐步骤,极大提升数据处理的时效性。
文章图片
3.极致性能-ClickHouse
- ClickHouse
- Row Store & Column Store
ClickHouse 则采用的是 Column Store,表中数据按照 Column 为逻辑存储单元在存储介质中连续存储。这种存储方式适合采用 SIMD(Single Instruction Multiple Data) 并发处理数据,恰恰弥补了 RowStore 存储方式的缺陷,尤其在大宽表(属性很多)的时候,查询效率明显提升。此外,列存方式相邻数据类型相同,因此天然适合数据压缩,从而达到极致的数据压缩比。
文章图片
- Performance
注:以下实验数据均为单节点:2 * Intel (R) Xeon (R) CPU E5-2650 v2 @ 2.60GHz; 128 GiB RAM; mdRAID-5 on 8 6TB SATA HDD; ext4.
文章图片
4. 巨人肩膀上的 GaussDB(for MySQL) HTAP只读分析
尽管 ClickHouse 拥有如此极致的性能,但实践生产过程中仍然面临一些困境。比如存在数据类型不支持,全量复制性能问题等方面的挑战。此外也有一些与引擎本身设计有关的性能问题:比如 FINAL 去重导致的查询性能问题等,给用户使用过程带来一些不好的体验。
- 全量并行复制
文章图片
- MVCC & Snapshot
Create Table: CREATE TABLE `runoob_tbl` (
`runoob_id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`runoob_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
---------------------------------------------------------------
ATTACH TABLE _ UUID '14dbff59-930e-4aa8-9f20-ccfddaf78077'
(
`runoob_id` UInt32,
`_sign` Int8 MATERIALIZED 1, /// _sign 字段
`_version` UInt64 MATERIALIZED 1 /// _version 字段
Materialize MySQL 引擎当前不提供 MySQL 数据的事务一致性视图,数据行以批量插入的方式同步到 ClickHouse 中,引擎底层使用的是 ReplacingMergeTree。如果数据发生了修改,获取最新的数据时需要指定 FINAL(类似于 GROUP BY)去重,并使用过滤器隐藏已删除的行。然而当数据规模很大时,FINAL 操作的性能往往不太理想。
为了感知事务,GaussDB(for MySQL) HTAP只读分析实现了事务一致性并提供四种隔离级别,用户可以根据具体使用场景选择不同的隔离级别。此外,GaussDB(for MySQL) HTAP只读分析还提供了快照功能,优化 FINAL带来的查询性能问题。
read_uncommitted: 不提供 MVCC 支持,可能会引入脏读
read_committed: 提供 MVCC 支持(包括SubQuery),读最新已 commit 的数据
query_snapshot: 规避 SELECT + FINAL 查询中的 Merge 开销,直接查询快照
query_raw: 不做任何优化,返回所有数据(包括已删除和更新的不同版本)
- FINAL 性能优化
5. GaussDB(for MySQL) HTAP只读分析兼容性及稳定性
- 类型支持增强
文章图片
- Unique Key 同步支持
- 优雅的复制中断重连
- 更完备的异常处理机制
6. GaussDB(for MySQL) HTAP只读分析个性化定制
- Show Slave Status 支持
- ALTER Database 支持
ALTER DATABASE db MODIFY SETTING ... // 修改库级 settings
ALTER DATABASE db ADD TABLE OVERRIDE tbl ... // ADD TABLE 且支持 Override
ALTER DATABASE db MODIFY TABLE OVERRIDE tbl ... // MODIFY TABLE 且支持 Override
ALTER DATABASE db DROP TABLE ...
- 表定义重写 Override
CREATE DATABASE test
ENGINE=MaterializeMySQL('host:port', 'db', 'user', 'pw')
TABLE OVERRIDE table1 (
_staged UInt8 MATERIALIZED 1 // 增加 MATERIALIZED 列,类型为 UInt8
)
PARTITION BY (...) // 覆盖分区字段
- 适配 MySQL Partition
- 黑/白名单过滤
CREATE DATABASE test
ENGINE = MaterializeMySQL('host:port', 'db', 'user', 'pw')
SETTINGS black_list='T1,T2' // 将T1、T2加入黑名单
7. 场景示例
前文分析了许多 GaussDB(for MySQL) HTAP只读分析的优点,那 GaussDB(for MySQL) HTAP只读分析到底能提供什么样的解决方案,为用户解决数据难题呢?
文章图片
上图以 MySQL + GaussDB(for MySQL) HTAP只读分析为例,用户既能得到 MySQL 完备的事务保障,又能享受到 GaussDB(for MySQL) HTAP只读分析的极致分析性能。用户从不同渠道获取数据并加载到 MySQL 引擎,GaussDB(for MySQL) HTAP只读分析作为 MySQL 的 “从库” 实时同步用户数据并提供高效的数据分析能力。
- 高实效性
- 数据压缩
- 历史备份
- 存储分层
8. 小结
HTAP虽然不是一个非常新的概念,但随着现阶段数据业务越来越模糊(AP业务TP化 ,TP业务AP化),这个概念又重新回到了人们的视线。用户对数据处理和消费需求的不断迭代和升级,也为 HTAP 的发展创造了更多机会。GaussDB(for MySQL) HTAP只读分析站在 ClickHouse 极致性能的肩膀上针对实际生产遇到的问题做了一系列优化,获得更快更好的使用体验。相信未来 HTAP 的竞争会愈演愈烈,这对 GaussDB(for MySQL) HTAP只读分析来说既是挑战也是机会,GaussDB(for MySQL) HTAP只读分析会继续为用户提供海量数据的高效解决方案,助力企业数字化转型。
【海量数据分析更快、更稳、更准。GaussDB(for|海量数据分析更快、更稳、更准。GaussDB(for MySQL) HTAP只读分析特性详解】本文由华为云发布。
推荐阅读
- 海量数据分析更快、更稳、更准。GaussDB(for MySQL) HTAP只读分析特性详解
- python|python ppt 绘图_Python数据分析-Matplotlib绘图基础
- 新 Slogan 新征程|OceanBase 海量记录 笔笔算数
- 数据分析|python机器学习之模型选择与优化
- redis|Reids解决海量重复提交问题
- 三个点带你解读Smartbi商业智能大数据分析平台
- STAC51数据分析
- 海量非结构化数据副本难保护,焱融科技携手英方推出联合解决方案
- 数据分析|数据分析学习1——数据获取,单因子探索分析与可视化
- 大数据分析|Python matplotlib plotly