Oracle 到 Elasticsearch 数据迁移同步

devtools/2024/11/25 1:09:46/

简述

Elasticsearch 是一个分布式的实时搜索与数据分析引擎,具有强大的可扩展性和高度的灵活性。CloudCanal 对于 Elasticsearch 的支持经过了多轮迭代,支持版本从 6.x 和 7.x 一路扩展到 8.x,并适配了其丰富多样的 API。

同时 CloudCanal 对 Oracle 源端同步技术进行了多处优化,大幅提升了数据同步的稳定性和可靠性。

本文主要介绍如何使用 CloudCanal 快速构建一条 Oracle 到 Elasticsearch 的数据同步链路。

技术点

Oracle 基于 LogMiner 的实时同步

CloudCanal 在 Oracle 源端的增量同步中,通过 LogMiner 分析 redo 日志,并结合多轮优化,显著提升了同步的稳定性与效率,已在用户生产环境中成功验证。主要特点包括:

  • Oracle RAC 支持与优化:专为 Oracle RAC 场景优化,确保数据同步的完整性和一致性。
  • 标准化 LogMiner 解析:默认采用 LogMiner 标准方法(ADD_FILE)解析 redo 日志,并提供 CONTINUOUS_MINE 作为补充(取决于 Oracle 版本)。
  • 全事件消费模式:支持全事件消费,保障同步过程中的稳定性。
  • 超大事务处理:本地缓存超大变更数据,处理源端 Oracle 超过百万级的变更。
  • 位点回溯:在消费出错时,支持使用时间戳、SCN 回溯位点,增强容错能力。
  • 数据校验与订正:提供定时的数据校验和订正机制,确保数据质量稳定。

经过以上优化,CloudCanal 在 Oracle 同步场景中表现更加稳健可靠,适应各种复杂的数据同步需求。

自动创建 Elasticsearch 索引和映射结构

CloudCanal 迁移同步任务支持自动将源端数据库表结构映射成 Elasticsearch 索引,该过程中允许用户在 级别上,个性化设置自己需要的索引和映射(Mapping)结构。这些设置包括:

  • 每个列可以指定是否需要索引。
  • 可以对 TEXT 类型的列设置 Elasticsearch 映射中的分词器(标准分词器)。
  • 自定义设置索引分片数、副本数。

生成内置 _id 并指定路由字段

在写入 Elasticsearch 时,_id 字段用于唯一标识每个文档(Doc)。数据路由基于 _id 值,确保数据分片定位一致。CloudCanal 数据同步默认遵循以下策略生成 _id:

  • 单主键表:对于单一主键表,默认使用源端关系表的主键列值作为 _id。
  • 多主键表:对于多主键表,通过分隔符 $ 连接多个主键列的值,组合成唯一 _id(可以通过参数 pkSeparator 自定义分隔符)。
  • 无主键表:若表无主键,则将所有列的值用 $ 连接,生成唯一的 _id。

此默认设置确保了每条数据在 Elasticsearch 中具有唯一的标识,同时提供稳定的分片路由。

操作示例

步骤 1: 安装 CloudCanal

请参考 全新安装(Docker Linux/MacOS),下载安装 CloudCanal 私有部署版本。

步骤 2: 添加数据源

登录 CloudCanal 控制台,点击 数据源管理 > 新增数据源

步骤 3: 创建任务

  1. 点击 同步任务 > 创建任务

  2. 配置源和目标数据源。

    1. 选择源和目标实例,并分别点击 测试连接
    2. 在源端实例下方 高级配置 中选择增量模式:LogMiner / 物化视图
    3. 在目标实例下方 高级配置 中选择时区配置:+08:00(默认)。
  3. 选择 数据同步 并勾选 全量初始化

  4. 选择需要同步的表。

  5. 选择表对应的列。如果需要选择同步的列,可先行在对端创建好索引。

  6. 点击 确认创建
    任务创建过程将会进行一系列操作,点击 同步设置 > 异步任务,找到任务的创建记录并点击 详情 即可查看。

    Oracle 源端的任务创建会有以下几个步骤:

    • 结构迁移
    • 初始化 Oracle 表级补全日志
    • 初始化 Oracle LogMiner 位点
    • 分配任务执行机器
    • 创建任务状态机
    • 完成任务创建
  7. 等待任务自动流转。
    当任务创建完成,CloudCanal 会自动进行任务流转,其中的步骤包括:

    • 结构迁移: Oracle 源端的表定义将会迁移到对端,如果同名索引在对端已经存在,则会忽略。
    • 全量数据迁移: 已存在的存量数据将会完整迁移到对端。
    • 增量数据同步: 增量数据将会持续地同步到对端数据库,并且保持实时(秒级别延迟)。

总结

本文简单介绍了如何使用 CloudCanal 进行 Oracle 到 Elasticsearch 数据迁移同步,帮助企业增强数据分析及实时搜索能力,提升数据的价值。


http://www.ppmy.cn/devtools/136699.html

相关文章

第五章 使用数据字典和动态性能视图

数据字典 任务目标: 识别内置数据库对象识别数据字典的内容和用途描述如何创建数据字典视图识别数据字典视图类别查询数据字典和动态性能视图描述管理脚本命名约定 数据库创建的对象 表(Tables):表是数据库中存储数据的基本结构…

数据结构 (5)栈

一、基本概念 栈是一种运算受限的线性表,它只允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),而另一端则被称为栈底(Bottom)。栈的插入操作被称为入栈(Push)&a…

性能测试调优之线程池的性能优化

做性能测试时,有些压测场景下TPS上不去,或者响应时间变长,或者直接出现一些连接 被拒绝的报错,这些都有可能是tomcat的连接池不够引起的。 连接池的概念 线程池:是一个管理线程集合的框架,它负责维护一个…

返回流类型接口的错误信息处理

返回流类型接口的错误信息处理 前言axios拦截器src/utils/request.ts对应接口 前言 返回流类型接口需要在响应成功回调里拦截,且该接口的status始终是200,尽管后端返回的code可能是非2xx,因此返回流类型的接口,其错误信息需要单独…

游戏AI实现-决策树

代码实现: 定义一个决策树节点 class DecisionTreeNode{public DecisionTreeNode(){} } 定义一个行为类: class Action : DecisionTreeNode{ } 定义一个决策类: class Decision : DecisionTreeNode{ } 应用: 参考书…

goframe开发一个企业网站 MongoDB 完整工具包19

1. MongoDB 工具包完整实现 (mongodb.go) package mongodbimport ("context""fmt""time""github.com/gogf/gf/v2/frame/g""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options" )va…

量子卷积神经网络

量子神经网络由量子卷积层、量子池化层和量子全连接层组成 量子卷积层和量子池化层交替放置,分别实现特征提取和特征降维,之后通过量子全连接层进行特征综合 量子卷积层、量子池化层和量子全连接层分别由量子卷积单元、量子池化单元和量子全连接单元组…

C#中的二维数组的应用:探索物理含义与数据结构的奇妙融合

在C#编程中,二维数组(或矩阵)是一种重要的数据结构,它不仅能够高效地存储和组织数据,还能通过其行、列和交叉点(备注:此处相交处通常称为“元素”或“单元格”,代表二维数组中的一个…