跳到主要内容

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 达成数据去重
  • 支持并行批量写入(但更复杂些)

操作示例

前置条件

任务创建

  • 任务管理->任务创建

  • 测试链接并选择 目标 数据库

  • 点击下一步

    截屏2022-08-15 19.53.57.png

  • 选择 数据同步,并勾选 全量数据初始化, 其他选项默认

    截屏2022-08-15 19.54.53.png

  • 选择需要迁移同步的表,目标映射规则可选择与源端一致转小写

    截屏2022-08-15 19.57.30.png

  • 选择需要迁移同步的列 ,目标映射规则可选择与源端一致转小写

    截屏2022-08-15 19.57.53.png

  • 确认创建任务

    截屏2022-08-15 19.58.13.png

  • 任务自动做结构迁移全量迁移增量同步

    截屏2022-08-15 20.02.17.png

校验数据

  • 程序往源端 ORACLE 造数据,I:U:D 比值为 15:83:2

    截屏2022-08-15 20.01.58.png

  • 任务正常运行一段时间后,停止造数据

  • 点击 ORACLE -> ClickHouse 任务详情更多 > 创建相似任务,第二步选择数据校验

    截屏2022-08-15 20.02.38.png

  • 数据校验 OK

    截屏2022-08-15 20.02.58.png

常见问题

是否支持分布式版本的 ClickHouse?

暂时不支持分布式版本的 ClickHouse ,主要工作量在于产品化结构迁移、增量同步 DDL 、数据写入等方面的变化。

如果不要 append 模式而采用强一致模式写入 ClickHouse 怎么办?

可以采用自定义代码将 update 拆分为 delete 和 insert ,实现实时一致的效果,但是 update 较多时,性能较差。

支持什么版本的 ORACLE ?

目前支持 11g,12c,19c, CDB 或 PDB 类型数据库皆可使用 CloudCanal 进行迁移同步。

总结

本文简单介绍了如何使用 CloudCanal 进行 ORACLE -> ClickHouse 数据迁移同步,助力传统企业级关系型数据库构建丰富的数据分析能力。