尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

数据同步工具天花板?支持MySQL、Oracle、SQL Server等主流数据库

数据同步工具天花板?支持MySQL、Oracle、SQL Server等主流数据库 很多企业的数据问题表面看是“数据取不到”往深了看其实是系统越来越多但数据在系统之间流不动。订单系统用MySQLERP跑Oracle老系统还留着SQL Server数仓又可能使用PostgreSQL、Doris、StarRocks等数据库。再往外还有API、Excel、CSV、消息队列以及各种业务系统。平时这些系统各自运行好像没什么问题。可一旦企业开始做统一数仓、经营分析或者数据中台麻烦马上出现财务要收入数据要去ERP找运营要订单数据要从业务库取管理层要一张经营报表背后可能要拼五六套系统。所以数据同步真正解决的从来不只是“怎么把一张表复制过去”而是几十套异构系统里的数据怎么长期、准确、稳定地流到需要它的地方。正式展开之前也整理了一套《数据仓库建设解决方案》里面涉及常见数据架构、同步方式和项目实践。正在做数据平台、数仓或者数据治理的可以拿去参考。需要自取https://s.fanruan.com/7igmg复制到浏览器一、支持MySQL、Oracle、SQL Server只是第一道门槛选数据同步工具时很多人第一眼都会看支持多少种数据源这个指标当然重要。因为现实里的企业IT环境几乎不可能只有一种数据库。新业务可能跑MySQL核心系统可能还在Oracle一批历史应用留着SQL Server分析平台又使用另外一套数据库。如果每增加一种数据源就重新开发一套取数程序最开始感觉不到什么。等到系统越来越多就会慢慢出现一种典型的数据架构MySQL一批脚本Oracle一批存储过程接口数据单独写程序Excel再放进某个定时目录。每条链路单独看都能运行但放在一起以后开发方式、运行日志、异常处理、任务依赖完全是割裂的。最麻烦的还不是代码多。而是某一天一个开发人员离职大家突然发现这条数据到底从哪里来的没人敢动。所以数据源覆盖真正解决的不只是“有没有某个连接器”而是企业有没有机会把分散的取数方式重新收回来。实际搭数据链路时MySQL、Oracle、SQL Server以及其他数据库、文件、接口等来源可以直接进入FineDataLink 5.0的数据集成链路后面的抽取、加工和写入继续沿着任务往下走。以后新增一个数据来源更多是扩展已有数据流而不是再单独养一套取数程序。当前产品支持范围也覆盖多类传统数据库、大数据及其他数据源。但企业做到这里其实才刚刚开始。因为连得上数据库不代表数据真的能同步好。二、异构数据库最难处理的其实是“数据语义”很多人理解的数据同步是SELECT出来再INSERT进去。同一种数据库之间可能还比较接近。一旦从Oracle迁到MySQL从SQL Server写进其他数据库事情就开始复杂了。比如Oracle里的NUMBER在目标端应该对应BIGINT还是DECIMAL源端VARCHAR长度和目标端规则不同怎么办DATE写入另一个数据库以后时间精度会不会发生变化金额字段原来保留六位小数目标表只有两位会不会悄悄丢掉精度还有NULL、默认值、字符编码、大字段、主键、唯一约束……这些细节单独看都很小。但数据同步有一个特点错误会被批量复制。假设一条金额字段映射规则错了每天进入500万条数据。一天以后是500万条问题记录一个月以后可能已经变成上亿条。这就是为什么真正测试数据同步工具时不能只准备一张几十列、几万行的简单Demo表。最好直接拿真实业务中的复杂字段去测试金额、时间、空值、特殊字符、大文本、联合主键以及各种边界值。因为异构同步真正需要验证的不是数据有没有过去。而是数据过去以后业务含义有没有发生变化。很多数据质量问题其实不是在报表层产生的。从数据离开源系统的那一刻就已经埋下了。三、数据量上来以后“每次全量”一定会出问题假设订单表只有10万行。每天凌晨全部同步一遍没什么问题。三年以后订单表已经20亿行。每天真正新增和修改的可能只有500万行。这时候如果为了获得500万条变化仍然每天重新扫描20亿条数据会发生什么业务数据库IO升高同步窗口越来越长网络传输量越来越大目标端还要重复处理大量没有变化的数据。所以数据同步规模一旦上来核心问题会从“数据怎么搬”变成“我怎么知道哪些数据发生了变化”这才是增量同步真正解决的问题。而且“增量”本身也不是一种技术。地区编码、组织架构这种低频变化的小表直接全量覆盖可能就够了持续新增的流水数据可以按时间或者递增ID读取同时存在新增和修改的数据可以通过更新时间等条件获取变化订单状态、库存、账户流水这类高频更新的数据还会进一步涉及CDC根据数据库日志捕获INSERT、UPDATE、DELETE。所以真正的数据同步架构本来就是混合的。落到FineDataLink 5.0里也可以按照这个思路拆变化不频繁的数据按周期更新普通业务明细只取新增或变化部分需要持续跟踪增删改的数据再放进数据管道。它的实时管道能够基于MySQL Binlog、SQL Server CDC等方式捕获数据库变化。这里真正值得记住的其实只有一句话不要先决定同步技术再去套业务数据。先问清楚数据量多大一天变化多少允许延迟多久有没有UPDATE和DELETE再决定到底应该全量、普通增量还是CDC。很多数据链路成本过高本质上就是一开始同步策略选错了。四、数据同步真正的分水岭在第一次故障以后做POC的时候绝大多数同步工具看起来都不错。选源表选目标表点击运行。几十万、几百万条数据很快过去了。但这只能证明正常情况下它可以运行。而企业生产环境最不缺的就是“不正常”。数据库重启、网络闪断、连接超时、目标库锁表、磁盘空间不足、字段异常、脏数据……假设一个10亿行的数据迁移已经完成8亿行这时候突然网络中断。恢复以后怎么办是重新从第1条开始还是从8亿条以后继续如果下午2:03实时链路中断2:10重新恢复那么还有几个问题必须回答2:03到2:10发生的数据变化有没有保留下来重新启动以后从哪个位置读取之前已经写过的数据会不会再写一次如果同一条订单UPDATE执行两次会不会影响最终结果所以数据同步做到生产环境以后必须开始考虑断点、重试、幂等、错误数据处理和恢复机制。这时候链路里真正有用的往往不是又多了一个“开始同步”的按钮而是故障以后还能知道自己停在哪里。像FineDataLink 5.0的数据管道会保留同步进度全量阶段完成以后发生中断可以继续从已有断点恢复任务运维里还能继续查看运行状态和记录。规模小的时候任务失败一次人工重跑就行。规模大以后如果每天1000个任务里有20个异常每个都需要开发人员手动查数据、找位置、补脚本运维成本会非常恐怖。所以判断一个同步工具是否成熟不妨观察一个很简单的场景把网络断掉再看看它怎么回来。五、比断网更隐蔽的问题是源表自己变了还有一种问题特别容易被低估Schema Change。数据库里的表并不是永远不变的。今天订单表30个字段。业务上线优惠券增加一个coupon_amount后来会员体系调整又增加member_level还有可能把某个INT改成BIGINT或者把字段长度从50扩到200。问题来了源表发生变化以后下游知道吗如果数据链路完全按照上线第一天的结构运行常见结果无非几种直接报错新增字段没有同步目标表结构不匹配下游SQL继续按照旧字段运行。真正麻烦的是第二种。任务每天还是绿色所有人都以为数据正常。一个月以后业务才发现新字段从来没有进入数仓。然后开始补表结构、补同步任务、补历史数据、重算指标。数据链路规模越大这类问题越难靠人解决。1000张表不可能每天让开发人员逐张检查有没有增加字段。所以成熟的数据同步已经不能只关注“数据有没有移动”。还要开始关注数据结构发生变化以后变化如何向下游传播。再往后就是血缘。一个源字段改变究竟影响了哪些同步任务、哪些明细表、哪些指标、哪些报表数据集成做到最后其实会和元数据、数据质量、数据治理逐渐连起来。六、任务显示成功不代表数据真的正确很多公司的数据同步监控页面非常漂亮。一眼看过去全部绿色。但绿色代表的通常只是程序执行成功。它不能证明数据一定对。假设源库今天有1000万条订单。目标库最终写入998万条。任务有没有可能显示成功有。源端销售额合计1.26亿元。目标端只有1.25亿元。任务有没有可能还是正常结束同样有可能。这就是数据同步里最危险的一种情况技术链路没报错业务数据已经错了。因此核心数据同步后最好至少检查四件事数量是否一致源端读取多少条目标端实际写入多少条关键指标是否闭合金额、库存、余额等重要字段汇总结果有没有偏差具体记录是否一致根据主键抽样检查字段值数据是否足够新鲜源端和目标端最大业务时间相差多久。如果是一条关键财务链路还可以继续检查每日借贷发生额如果是库存数据可以检查SKU数量和库存总量如果是订单则可以按照日期、渠道、状态分别核对。所以校验规则不能只有技术口径还应该加入业务口径。数据链路跑完以后这些检查也可以继续接进FineDataLink 5.0的数据检测和任务运维环节数量、字段以及业务规则出现异常时比单纯盯着“任务成功”更容易提前暴露问题。当前版本的数据检测覆盖MySQL、Oracle、SQL Server、PostgreSQL等多类数据源。这一步很重要。因为企业真正需要交付的从来不是一个成功运行的同步任务。而是一份下游敢直接拿去分析的数据。七、以后再选数据同步工具别只数数据库数量所以再看到一款工具宣传支持MySQL、Oracle、SQL Server……当然可以看。但不要看到这里就结束。真正做选型时可以继续问七个问题数据源越来越多以后能不能统一管理Oracle、MySQL等异构数据库之间字段类型怎么映射大表到底是全量、普通增量还是CDC上百张甚至上千张表能不能批量建立和维护链路网络中断、数据库重启以后任务从哪里恢复源表新增字段或者修改结构以后下游会发生什么最终如何证明源端和目标端的数据真的一致这七个问题基本覆盖了一套数据同步系统从能用 → 好用 → 能长期运行的完整过程。真正进入生产环境以后一款同步工具面对的是几十种数据源、成百上千张表、亿级数据量、持续变化的数据、不断调整的表结构以及随时可能发生的各种异常。数据库能不能接只决定项目能不能开始。同步策略是否合理、故障以后能不能恢复、结构变化能不能处理、最终结果能不能验证才决定这条数据链路一年以后还敢不敢继续用。企业真正需要建设的也从来不是一堆“把A表搬到B表”的任务。而是一套能够持续运行的数据流动体系。数据从哪里来、怎么变化、什么时候到、出了问题怎么办、最后是否可信——这些问题都能回答清楚数据同步才算真正做完。
返回列表