关于数据库:5分钟搞定-MySQL-到-ElasticSearch-数据同步和宽表构建CloudCanal实战

6次阅读

共计 2963 个字符,预计需要花费 8 分钟才能阅读完成。

简述

CloudCanal 2.0.X 版本近期反对了宽表构建能力,在数据预处理畛域向前走了一步。

计划特点

  • 绝对灵便,对业务数据和构造贴合性好
  • 能很好的反对事实表与维表打宽表需要

本文以 MySQL 到 ElasticSearch6 单事实表双维表为案例,介绍 CloudCanal 宽表构建和同步的操作步骤。

技术点

打宽表的必要性

关系型数据库为了应答在线业务对于并发、毫秒级响应,同时操作绝对趋势 kv 化, 个别基于关系范式进行设计,通过外键或约定外键(非物理束缚)进行关联。

当业务需要波及到多张关联表 (业务经营、报表、BI 需要),查问表的先后顺序成为操作响应工夫的要害因素,但排列组合式品种随关联表数量(n) 减少会收缩十分快(n!),导致查问效率低下。

关联表数量 排列品种
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
10 403200
11 4435300

数据库或者数仓做 join 查问(特地是 5 张表以上),最难的事件变成了如何从这么多可能性中(搜寻空间)找到最好的那一个。

数据迁徙和同步 以绝对比拟小的代价,将多张关联表进查问库或者数据仓库之前,通过 反查 或者 窗口期待变更数据 做关联,打成一张宽表写入对端,显著加重后续查问对于 SQL 优化器的要求。

宽表的品种和形式

这里的宽表品种指其数据起源表品种 (常见但不全面),常见的咱们分 事实表 维度表, 比方订单表被定义成事实表,用户表被定义成维度表,商品表被定义成维度表。

个别事实表和维度表数据具备相似 n:1 的关系,也就是 1 个用户会有 n 个订单 (1 个订单属于 1 个用户),1 个商品也会存在 n 个订单 (1 个订单会关联 1 个或无限个数商品)。

打宽表的形式有多种,依据场景,最常见的蕴含以下两种

  • 多事实表 打宽表

    • 个别场景是在无限的工夫内,关联的变更在这些表上产生(多流 join),打宽表工具只有在肯定的工夫范畴内等到这些数据(window),即可打成宽表数据。
  • 单事实表和多维度表打宽表

    • 个别场景是事实表变更,然而维度表没有任何变动,这时打宽表工具须要通过事实表变更数据反查维度表数据,打成宽表。

CloudCanal 目前打宽表的形式次要通过反查实现,对于多流 join , 实际上也能够通过反查实现,只是可能不足数据一致性。

举个 ‘ 栗 ’ 子

前置条件:

  • CloudCanal 社区版部署, 参见 社区版装置文档
  • 筹备好 MySQL 数据库(本例应用 5.7 版本)和 ElasticSearch 数据库(本例应用 6.x 版本)
  • MySQL 上创立 1 张事实表 (order) 和 2 张维表 (user、product)
  • ElasticSearch 上创立 1 个索引 order , 并额定蕴含两张维表相干数据

    • user_id (关联 user.id), user_name(对应 user.name)
    • product_id(关联 product.id) ,product_name(对应 product.name),product_price (对应 product.price)

开发宽表代码

  • 代码工程 cloudcanal-data-process,并找到代码类 MySqlToEsOnlyFact_one_fact_two_dim.java
  • 批改必要信息


打包

  • 进入工程目录,应用命令进行打包

    % pwd
    /Users/zylicfc/source/product/cloudcanal/cloudcanal-data-process
    % mvn -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true -Dmaven.compile.fork=true clean package

自定义代码包

  • 打包命令后,代码包位于工程目录下的 wide-table/target 目录

增加数据源

  • 登录 CloudCanal 平台
  • 数据源治理 -> 新增数据源
  • MySQLElasticSearch 别离增加

工作创立

  • 工作治理 -> 工作创立
  • 抉择 指标 数据源
  • 抉择 数据同步 ,并勾选 全量数据初始化, 其余选项默认
  • 抉择须要迁徙同步的表, 此处只有抉择事实表即可,维表会通过自定义代码反查补充
  • 抉择列, 默认全选,%(#ea1f1f)[抉择上传代码包(门路如上所示)]
  • 确认创立, 并主动运行

校验数据

  • 变更事实表数据

  • 变更维表数据

数据变化规律

  • 事实表插入,更新都会反查维表最新数据并写入对端
  • 维表更新,根底模式中,须要触发事实表更新能力带上最新的维表变更数据写入对端
  • 维表数据删除,根底模式中,如果触发事实表更新,默认将会把对应的维表数据(已删除)置为 null, 然而依据对端数据源不同,成果可能会有所差异(比方不会置空)

FAQ

维表变动后怎么办?

目前咱们提供的根底模式,维表变动不会间接触发事实表更新,因为这个基本上意味着大规模对端数据变更,可能影响对端数据服务稳定性。所以源端触发事实表更新(比方变更一个工夫字段),带上最新的维表数据进行对端数据刷新。

另外对于维表数据的删除,如果触发事实表更新从而刷新对端数据,则默认置为 null。

不会开发 java 代码怎么办?

如果能打包不会 java 开发,在 cloudcanal-data-process 寻找相应模版,批改配置即可。

如果不能打包也不会开发,找 CloudCanal 同学帮助。

如果遇到出错或者问题怎么办?

如果会 java 开发,倡议关上工作的 printCustomCodeDebugLog 察看输入的数据是否合乎预期,如果不合乎预期,能够关上工作的 debugMode 参数,对数据转换逻辑进行调试。

如果不会 java 开发, 找 CloudCanal 同学帮助。

还反对其余数据源么?

这个是 CloudCanal 通用能力,只有源和指标之间实现了全量迁徙和增量同步,即反对。

总结

本文简略介绍了如何应用 CloudCanal 进行 MySQL -> ElasticSearch 的宽表构建,以最常见的单事实表多维表形式举例。各位小伙伴,如果感觉还不错,请点赞、评论加转发吧。

更多精彩

  • 异地多活根底之数据双向同步进阶篇 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇 -CloudCanal 实战
  • 支流关系型数据库到 Kudu 实时数据同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ElasticSearch 迁徙同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 MySQL 异构在线数据迁徙同步 -CloudCanal 实战
  • MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
  • 构建基于 Kafka 直达的混合云在线数据生态 -cloudcanal 实战
  • 5 分钟搞定 MySQL 到 TiDB 的数据同步 – CloudCanal 实战

社区快讯

  • 咱们创立 CloudCanal 微信粉丝群啦,在外面,你能够失去最新版本公布信息和资源链接,你能看到其余用户一手评测、应用状况,你更能失去激情的问题解答,当然你还能够给咱们提需要和问题。快快退出吧。

    • 扫描下方二维码,增加咱们小助手微信拉您进群,接头语 (“ 加 CloudCanal 交换群 ”)

      退出 CloudCanal 粉丝群把握一手音讯和获取更多福利,请增加咱们小助手微信:suhuayue001
      CloudCanal- 收费好用的企业级数据同步工具,欢送品鉴。
      理解更多产品能够查看官方网站:http://www.clougence.com
      CloudCanal 社区:https://www.askcug.com/
正文完
 0