ORACLE 到 ClickHouse
简述
ClickHouse 是一种流行的列式数据库,对于计算 uv、mv、pv 等聚合类数据相当友好,所以广泛使用于各类报表场景。
本文主要介绍如何使用 CloudCanal 快速构建一条稳定高效运行的 ORACLE 到 ClickHouse 数据同步链路。 示例中 ORACLE 库为 PDB 模式, ClickHouse 为单副本实例。
技术点
ORACLE 源端增量同步技术
CloudCanal 对于 ORACLE 源端增量同步采用 LogMiner 分析 redo 日志或物化视图/类trigger 方式进行。 对于前者,我们采用了多种优化方式,将 ORACLE 源端增量同步做到准确、稳定、性能几个方面的平衡,这些技术包括:
- 采用 LogMiner 最标准的方式( ADD_FILE)作为默认解析方式,同时辅以 CONTINUOUS_MINE作为补充(有 ORACLE 版本限制)
- 采用全事件消费模式保障 ORACLE 稳定
- 支持本地存储以缓存超大变更数据,并采用手动指定序列化/反序列化器让数据存取更可靠
- 采用更加全面的 redo SQL 解析器提升解析准确性
- 支持事件合并,批量交付对端写入,大幅提升数据写入性能
- 支持 DDL 同步(部分链路),部分减少数据同步链路运维压力
- 支持位点回拉,让数据消费错误有机会得以弥补
- 支持全量数据校验,让数据质量得到更好的监测
- 支持任务编辑,让长周期运行的数据同步任务更平滑地应对同步对象的变化
- 加强的监控指标,让同步状态更加明了
- 缩小的数据库权限,让风险进一步缩小
围绕 ORACLE 数据库的周边生态,我们希望能够做到 GoldenGate 一样强大甚至超出,相关产品技术不断迭代演进。
ClickHouse 高性能写入
CloudCanal 对于 ClickHouse 高性能写入技术,主要结合列存的特点、常见业务场景流量特点、用户使用和理解的便利性 3 方面进行选择与平衡。
列存相对行存的特点:
- 列的批量读取效率高,磁盘 IO 相对小
- 列存数据块因类型相似,压缩效率好,可使用的计算指令和方式更多
常见业务场景流量特点:
- insert 和 update 比例高于 delete, 偏向分析统计的日志类数据 insert 比例远高于后两者
- 要求高并发的业务,数据读取更新往往只在几个列上
- 偏向运营用户的交互式数据分析更多在最近写入的数据上
用户使用和理解便利性:
- 不维护额外的字段,比如版本、是否删除等
- 性能和实时一致性可选择,让用户有路可走
- 选择 ClickHouse 主流表引擎,防止未来版本 deprecated
针对上述3个方面的特点,我们采用了以下一些技术达成平衡
- insert/update 走 APPEND 方式(批量写入),delete 走 ALTER TABLE ,性能好,但需要 OPTIMIZE 或查询带 FINAL
- 完全一致通过自定义代码拆分 update 为 delete 和 insert 达成,但性能降低
- 默认采用 ReplacingMergeTree 达成数据去重
- 支持并行批量写入(但更复杂些)
操作示例
前置条件
下载安装 CloudCanal 私有部署版本,使用参见快速上手文档
准备一个 ORACLE 数据库,和 ClickHouse 实例(本例分别使用自建 Oracle 19c 和阿里云 ClickHouse 21.8)
登录 CloudCanal 平台 ,分别添加
ORACLE 采用 PDB 方式添加
任务创建
任务管理->任务创建
测试链接并选择 源 和 目标 数据库
点击下一步
选择 数据同步,并勾选 全量数据初始化, 其他选项默认
选择需要迁移同步的表,目标映射规则可选择与源端一致和转小写
选择需要迁移同步的列 ,目标映射规则可选择与源端一致和转小写
确认创建任务
任务自动做结构迁移、全量迁移、增量同步
校验数据
程序往源端 ORACLE 造数据,I:U:D 比值为 15:83:2
任务正常运行一段时间后,停止造数据
点击 ORACLE -> ClickHouse 任务详情,更多 > 创建相似任务,第二步选择数据校验
数据校验 OK
常见问题
是否支持分布式版本的 ClickHouse?
暂时不支持分布式版本的 ClickHouse ,主要工作量在于产品化结构迁移、增量同步 DDL 、数据写入等方面的变化。
如果不要 append 模式而采用强一致模式写入 ClickHouse 怎么办?
可以采用自定义代码将 update 拆分为 delete 和 insert ,实现实时一致的效果,但是 update 较多时,性能较差。
支持什么版本的 ORACLE ?
目前支持 11g,12c,19c, CDB 或 PDB 类型数据库皆可使用 CloudCanal 进行迁移同步。
总结
本文简单介绍了如何使用 CloudCanal 进行 ORACLE -> ClickHouse 数据迁移同步,助力传统企业级关系型数据库构建丰富的数据分析能力。