5分钟搞定ORACLE到ClickHouse数据迁移同步-CloudCanal实战[亲测有效]

5分钟搞定ORACLE到ClickHouse数据迁移同步-CloudCanal实战[亲测有效]简述 ClickHouse 是一种流行的列式数据库,对于计算 uv、mv、pv 等聚合类数据相当友好,所以广泛使用于各类报表场景。 本文主要介绍如何使用 CloudCanal 快速构建一条稳定高效运行

5分钟搞定ORACLE到ClickHouse数据迁移同步-CloudCanal实战

简述

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 SaaS版,使用参见快速上手文档

  • 准备一个 ORACLE 数据库,和 ClickHouse 实例(本例分别使用自建 Oracle 19c 和阿里云 ClickHouse 21.8)

  • ORACLE 账号权限配置

  • 登录 CloudCanal 平台 ,分别添加

    截屏2022-08-15 20.19.48.png

  • ORACLE 采用 PDB 方式添加

    截屏2022-08-15 20.01.30.png

任务创建

  • 任务管理->任务创建

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

  • 点击下一步

    截屏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 数据迁移同步。各位读者朋友,如果你觉得还不错,请点赞、评论加转发吧。

原文地址:https://www.cnblogs.com/clougence/archive/2022/08/31/16642045.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4834.html

(0)
上一篇 2023-06-03
下一篇 2023-06-03

相关推荐

  • Python模块:Numpy计算数组

    Python模块:Numpy计算数组Numpy是Python中功能强大的库之一,它为Python提供了一种更高效的方法来处理大型数​​组和矩阵。Numpy使得Python变得更接近于一种与MATLAB和R等科学计算语言相似的语言,使其在科学计算和数据分析方面更有竞争力。它具有广泛的功能和易于使用的API,允许开发人员更快地进行数值计算。

    2024-03-06
    34
  • Python使用os模块创建文件夹

    Python使用os模块创建文件夹随着计算机技术的飞速发展,Python作为一种高级编程语言,已经被广泛应用在各个领域。其中,应用文件系统的操作,是Python的一个重要的领域。而在这其中,使用os模块创建文件夹是一个十分常见的操作。

    2024-05-15
    15
  • binlog查看原始sql_MySQL binlog

    binlog查看原始sql_MySQL binlog本文关键字:大事务、binlog、Linux 问题 我们并不喜欢 MySQL 中出现大事务(更新很多数据的事务),大事务往往带来很多维护的问题。 我们在维护 MySQL 时,需要关注于是否出现了较大…

    2023-03-19
    146
  • 使用Python对List进行排序的方法

    使用Python对List进行排序的方法排序是编程中非常基础的操作之一,它可以帮助我们更好地组织和处理数据。在Python中,有多种方法可以对List进行排序。本文将从多个方面对使用Python对List进行排序的方法进行详细阐述。

    2024-05-20
    6
  • Python实现简单的命令行工具

    Python实现简单的命令行工具a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-02-26
    56
  • Redis | 第7章 Redis 服务器《Redis设计与实现》[亲测有效]

    Redis | 第7章 Redis 服务器《Redis设计与实现》[亲测有效](第7章 Redis 服务器) 前言 参考资料:《Redis设计与实现 第二版》; 第二部分为单机数据库的实现,主要由以下模块组成:数据库、持久化、事件、客户端与服务器; 本篇将介绍 Redis 的服

    2023-04-30
    100
  • MySQL总结(十二)数据库事务-详解

    MySQL总结(十二)数据库事务-详解数据库事务 1. 事务的应用场景说明 什么是事务? 在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异…

    2023-03-11
    104
  • Python实现按钮展示功能 – 让用户轻松操作界面

    Python实现按钮展示功能 – 让用户轻松操作界面按钮展示是指在界面上显示可点击的按钮,通过点击按钮实现相应的操作。在界面中使用按钮展示可以提升用户交互体验,方便用户进行操作,也方便开发者实现用户需求。

    2024-04-11
    25

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注