数据同步系统搭建方案

背景

在大部分场景下,业务数据都是存放在MySQL中的,有一天老板想要每天查看一下昨天的数据,比如说想看看昨天一共成交了多少订单,销售额是多少,差评率等等数据应该怎么实现呢。

我们当然可以写个接口直接查MySQL的数据实现,但是这么做完你会发现,老板可能又要对研发部门降本增效了,原因是每天访问个数据要加载半天 ,连领导都敢糊弄,看来还是得提升下人效!

出现这种接口慢问题都不用想,肯定是执行查询SQL慢,订单相关的表就算分了库分了表没有个千万级也得有大几百万级,在这么大的数据量上再去聚合再去计算,整不好还得来几个联表查,虽然你知道咋回事,但是老板管你那些呢,八股文背给下一家面试官听吧~

所以我们最好把昨天的数据在今天的凌晨同步到专门用作数据分析场景的DB里,要说OLAP场景下名气最大的还得是ClickHouse,当你把数据灌入ck中再去运行查询SQL你会发现,报表查询像呼吸一样顺畅。

那么如何做到每天定时将MySQL数据同步到ClickHouse中呢。

数据脚本

一般这种需求最简单肯定是写脚本,总共分两步

  1. JDBC连接MySQL执行查询
  2. JDBC连接ClickHouse执行插入

咔咔就是一顿增删改查,如何做到定时呢,放服务器上编辑下crontab完事,听起来一点毛病没有。但仔细一想却又端倪。

  • 如果数据量过大,比如昨天有10w单订单数据,同步到5w失败了,要不要从0开始同步
  • 如何保证程序稳定呢
  • 怎么进步啊,工作这么久不还是增删改查嘛、
  • 如何扩展?今天从MySQL同步到CK,明天从MYSQL同步到Doirs呢,现改代码吗?

我们如果有一个异构数据源同步系统,这些需求不就迎刃而解了吗,不论是从mysql到ck还是到doirs、es等等等都能支持。

如何实现一个异构数据源之间的数据同步系统呢。

数据同步工具

市面上针对异构数据源数据同步的框架有很多,比较出名的有阿里的datax、apache seatunnel、字节的bitsail、袋鼠云的chunjun。

我们拿最经典的datax代码来举个例子。

可以看到datax基本上支持了大部分的数据源的读写,datax通过抽象执行脚本运行同步任务,这样的话就算改变同步的数据源也不需要去修改程序,只需要修改datax的执行脚本即可。

定时调度

有了数据同步框架,如何做到定时调度呢,现在市面上比较受欢迎的定时调度框架非xxl-job莫属,现在思路就比较清晰了。

搞一个spring的项目,引入xxl-job依赖,根据定时配置调度构造datax的执行脚本交给datax运行。

断点续传

datax并没有依赖大数据引擎,如果想要使用断点续传特性的话可以使用seatunnel或chunjun,他们都通过使用大数据引擎来实现断点续传。

数据同步组件的启动方式大同小异,切换起来也不麻烦。

总结

  1. 构造一个springboot项目
  2. 引入xxl-job做调度组件
  3. 选择数据同步框架做底层支撑,datax、seatunnel、chunjun
  4. 如果开启断点续传,适配底层引擎
相关推荐
大黄说说19 小时前
深入理解 Go 协程 Goroutine:并发编程的核心精髓
java·数据库·python
锋行天下19 小时前
数据库安全并发控制详解:乐观锁 vs 悲观锁 vs 原子操作
前端·数据库·后端
IManiy19 小时前
总结之Vibe Coding:了解后端
后端
许彰午19 小时前
38_Java设计模式之装饰器模式
java·设计模式·装饰器模式
神奇小汤圆20 小时前
全网最全 Claude Code 命令指南:会话、权限、扩展、自动化全搞定!从新手到大神,这一篇就够了
后端
折哥的程序人生 · 物流技术专研20 小时前
Java 23 种设计模式:从踩坑到精通 | 组合模式 —— 树形结构处理,部分与整体一视同仁
java·组合模式·java面试·springsecurity·结构型模式·java设计模式·从踩坑到精通
神奇小汤圆20 小时前
从0开始,在国内用上Claude Code的终极保姆教程来了。
后端
郝学胜-神的一滴20 小时前
完全二叉树与堆底层原理深度剖析 | 手写C++大顶堆实现
java·开发语言·数据结构·c++·python·算法
农民小飞侠20 小时前
[leetcode] 165. Compare Version Numbers
java·算法·leetcode
砍材农夫20 小时前
物联网实战|Spring Boot + Netty 搭建 MQTT 消息路由与流转层
java·spring boot·后端·物联网·spring