大数据之路:数据同步
目录1.数据同步基础2.阿里数据仓库的同步方式3.数据同步遇到的问题和解决方案1.数据同步基础大数据的数据同步主要包括从分布式业务系统同步进入数据仓库和数据从数据仓库同步进入数据应用和数据服务两个方面。本文主要讲述的是前者。从业务系统同步数据到数据仓库的数据同步总的说来分为三种直连同步(侵入式)数据文件同步数据库日志解析。直连同步通过JDBC方式直接连接源系统抽取数据当数据量大时容易对数据库造成压力甚至拖垮数据库的性能。数据文件同步约定好数据文件的格式编码大小通过专门的FTP文件服务器传输到目标系统同时配上一个校验文件用于核验数据文件的数据量以及文件大小等校验信息以防丢包并验证数据同步的准确性。传输前加密压缩传输后解密和解压缩。数据库日志解析同步这个方式其实已经 可以达到“实时”和“准实时”的要求了。数据库日志文件格式稳定内容丰富解析日志文件获取发生变更的数据完成增量同步的需求。数据库日志抽取通常是获取所有的数据记录的变更(增删改)根据主键分组并按照操作时间倒序排序 来查看数据状态的变化。通过数据库日志解析增量同步该方式性能好效率高对业务系统影响较小但有如下问题a.数据延迟。例如业务系统做批量补录可能会使数据更新量超出系统处理峰值导致数据延迟。b.投人较大。采用数据库日 抽取的方式投入较大需要在源数据库与目标数据库之间部署 个系统实时抽取数据。c.数据漂移和遗漏。数据漂移一般是对增量表而言的通常是指该表的同一个业务日期数据中包含前一天或后一天凌晨 附近的数据或者丢失当天的变更数据。QST:数据延迟和数据漂移这俩我不能理解啥意思啥情况“删除数据”这个变更情况其落地方式视情况而定 主要有三种。第一种不过滤删除流水。不管是否是删除操作都获取同一主键最后变更的那条流水。第二种过滤最后一条删除流水。如果同一主键最后变更的那条流水是删除操作就获取倒数第二条流水。第三种过滤删除流水和之前的流水。如果同一主键变更的过程中有删除操作则根据操作时间讲该删除操作和之前的操作流水都过滤掉。一般可使用第一种“不过滤删除流水”留下删除标识来判断数据是否有效。如果明确业务数据不存在业务上的删除但是存在批量手工删除或备份数据删除例如淘宝商品会员 等则可以采用只过滤最后一条删除流水的方式通过状态字段来标识删除记录是否有效。(QST:折啥意思为什么这样的话第二种方式有效)2.阿里数据仓库的同步方式阿里数据同步的数据源类型是多样的需要同步的数据是海量的阿里大数据处理系统MaxCompute的数据存储达到EB级别每天同步的数据量达到PB级别。批量数据同步Datax,多方向多自由度的数据同步有分布式有单机的。读取数据处理处于中间状态的数据格式化统一化再传到目标数据仓库。一般所有字段全部统一用String类型。一个大Job通过Splitter切分为多个并行执行的Sub-Job运行Sub-Job中的读入数据数据部分对中间状态做处理通过Channel传给WriterWriter负责数据写出模块。实时数据同步双十一的数据大屏是通过解析Mysql库binlog日志(相当于Oracle的归档日志)来实时获得增量的数据更新加上订阅消息实现实时增量同步数据。比如阿里实时数据传输平台TimeTunnel(TT)通过一个模块不停去读取并解析各机子的日志文件增量数据通过数据流传输到日志交换中心然后通知所有订阅了这些数据的数据仓库系统来获取。3.数据同步遇到的问题和解决方案分库分表的处理TDDL(Taobao Distributed Data Layer) 分布式数据库访问引擎通过建立中间状态的逻辑表来整合统一分库分表的访问。再JDBC层之上再持久层之下包括了SQL解释器SQL优化器SQL执行器结果集合并。QST:真牛逼啊有源码可看吗高效同步和批量同步OneClick产品实现了数据的一键化和批量化同步还包括了与数据同步相关的建表配置任务发布测试操作。 数据仓库的数据源种类丰富不同数据源的同步需要开发人员去了解其特殊配置为解决这个问题OneClick通过库名和表名唯一 定位通过IDB接口获取元数据信息自动生成配置信息。增量和全量同步的合并在数据库不支持update或者数据量特别大的情况下采用全外连接(Full outer Join)数据全量覆盖重新加载(Insert Overwrite)。用今天新增数据 full outer join 昨日全量数据得到今日全量数据 insert overwrite。如果怕数据错误以时间为分区字段保留近5-7日的全量数据版本。同步性能的处理基于负载均衡的思想设计的一套数据同步方案实现了根据目标数据库元数据信息来自动估算同步任务所需的总线程数数据同步任务按照业务优先级定位。数据漂移的定义ODS表的同一个业务日期数据中包含前一天或后一天凌晨附近的数据或者丢失当天的变更数据。数据漂移的案例双十一的时候发现有批在11月11日23:59:59左右支付的交易订单漂移到了12日。主要原因是用户下单支付后系统需要调用支付宝接口而有所延迟从而导致这些订单最终生成的时间跨天了。即modified_time和log_time都晚于proc_time。数据漂移的原因时间戳字段通常分为4类具体业务过程发生时间 proc_time数据库表中数据记录更新时间的时间戳字段 modified_time数据库日志中标识数据记录更新时间的时间戳字段log_time数据记录被抽取到数据仓库的时间戳字段 extract_time。按理来讲这四个应一样但这四个往往出现差异从而导致当根据其中某个时间戳字段区分ODS表时就会发生数据漂移。数据漂移的一般处理1.多获取后一天凌晨15min的数据来保证数据只多不少而具体的数据切分让下游根据自身不同的业务场景用不同的业务时间 proc time 来限制。但是这种方式会有一些数据误差例如 某个订单是当天支付的但是第二天凌晨申请退款关闭了该订单那么这条记录的订单状态会被更新下游在统计支付订单状态时会出现错误。(QST这个案例我不理解会出现啥错误)2.通过多个时间戳字段限制时间来获取相对准确的数据。首先根据log_time冗余前一天最后15min和后一天最开始15min的数据然后根据modified_time去筛选出当天数据确保不会出现因系统问题导致的遗漏。然后将后一天log_time前15min的数据按照logtime升序排序去重获得最接近当天记录变化的数据。最后将第一步的全部数据和第二步中最接近昨天的记录做全外连接然后通过限制proc_time来最终获取我们所需要的数据。牛啊牛啊真牛啊操作包含多个业务过程时发生数据漂移的处理比如订单有多个业务流程包括 下单支付成功每个业务过程都有对应的时间戳每个业务过程都可能会发生数据漂移。因此我们可以根实据际情况获取后 15 分钟的数据并限制多个业务过程的时间戳字段下单、支付、成功都是“双 ”当天的然后对这些数据按照订单的 modified time 升序排列获取每个订单首次数据变更的那条记录。此外我们可以根据 log_time 分别冗余前一天最后 15 分钟的数据和后一天凌晨开始 15 分钟的数据并用 modified time 过滤非当天数据针对每个订单按照 log time 进行降序排列 取每个订单当天最后一次数据变更的那条记录。最后将两份数据根据订单做全外连接将漂移数据回补到当天数据中。QST我不理解。。

相关新闻

MIPI raw与unpacked raw的本质区别:字节组织哲学解析

MIPI raw与unpacked raw的本质区别:字节组织哲学解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 1:16:22 阅读更多 →
基于YOLOv8的持械检测模型落地:数据、训练与部署全攻略

基于YOLOv8的持械检测模型落地:数据、训练与部署全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 1:16:22 阅读更多 →
输入函数秒出标准图:大角几何Beta版实测全记录

输入函数秒出标准图:大角几何Beta版实测全记录

很多做数学课件、出试卷的人都有过这种体验:一道函数题明明思路很清楚,结果想配一张干净的示意图,要么在网上搜出来的图糊成一团,要么坐标轴刻度不对、顶点位置飘了,最后只能自己拿几何画板慢慢拖,拖完还不…

2026/10/11 1:16:22 阅读更多 →

最新新闻

飞牛NAS上用Docker Compose编排Nginx+PHP+MySQL+Redis轻量LEMP环境

飞牛NAS上用Docker Compose编排Nginx+PHP+MySQL+Redis轻量LEMP环境

前几天帮朋友折腾一台飞牛NAS,要把一个PHP项目从旧服务器挪过来。我最开始图省事,直接用飞牛自带的应用商店装了一套Nginx套件,结果发现PHP版本太老,MySQL数据库目录也被套件管死,想改配置还得翻半天权限。最后还是退回…

2026/10/11 2:11:53 阅读更多 →
YOLOv5船舶检测四大实战改进:小目标、海面干扰与红外适配

YOLOv5船舶检测四大实战改进:小目标、海面干扰与红外适配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 2:11:53 阅读更多 →
双指针算法详解:对撞、快慢与滑动窗口实战

双指针算法详解:对撞、快慢与滑动窗口实战

1. 双指针到底解决了什么问题先从一个最常见的场景说起。假设你拿到了一个有序数组,要找出其中两个数,使它们的和等于某个目标值。最直接的想法是两层循环暴力枚举,第一层固定一个数,第二层遍历剩下的数去检查。这个方案的复杂度是…

2026/10/11 2:11:53 阅读更多 →
EtherCAT网关选型全攻略:协议、芯片、线缆三大关键

EtherCAT网关选型全攻略:协议、芯片、线缆三大关键

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 2:11:53 阅读更多 →
Docker搭建Redis集群实战:从主从复制到哨兵模式与Cluster分片

Docker搭建Redis集群实战:从主从复制到哨兵模式与Cluster分片

1. 为什么要用Docker搭Redis集群:从单节点到主从哨兵的演进逻辑先说一个很多人问我的问题:单机Redis用得好好的,为什么要费劲搭集群?这个问题其实分两层。第一层,如果你的业务量还没到单节点扛不住的程度,那…

2026/10/11 2:11:53 阅读更多 →
大华ICC平台联接客户端部署与联调实战:从安装到信令抓包排障

大华ICC平台联接客户端部署与联调实战:从安装到信令抓包排障

简介:大华ICC平台联接客户端资源包面向安防运维人员、系统集成商及需要远程视频监控管理的技术人员,围绕大华ICC智能云连接平台的客户端部署与设备接入展开。压缩包共4个文件,约277.47MB,包含1个exe安装程序、2个xml配置说明文件及…

2026/10/11 2:10:52 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →