《阿里大数据之路》读书笔记:第三章 数据同步

news2024/12/22 22:08:12

第三章 数据同步

数据同步技术含义:不同系统间的数据流转,有多种不同的应用场景。

应用场景:

  • 同类型不同集群数据库之间的数据同步
  • 主数据库与备份数据库之间的数据备份
  • 主系统与子系统之间的数据更新
  • 不同地域、不同数据库类型之间的数据传输交换

大数据系统中的数据同步

  • 数据从业务系统同步进入数据仓库
  • 数据从数据仓库同步进入数据服务或数据应用

一、数据同步基础

源业务系统的数据类型:

  • 关系型数据库的结构化数据:MySQL、Oracle等,数据存储在数据库表中
  • 非关系型数据库的非结构化数据:HBase、MongoDB等,数据存储在数据库表中
  • 文件系统的结构化或非结构化据:阿里云对象存储OSS、文件存储NAS等,数据以文件形式进行存储

数据同步需要针对不同的数据类型及业务场景选择不同的同步方式。

同步方式可以分为三种:

  • 直连同步
  • 数据文件同步
  • 数据库日志解析同步
1.1 直连同步

通过定义好的规范接口API直连业务数据库,如JDBC规定了统一规范的标准接口。适合操作型业务系统的数据同步。

直连同步优缺点:

  • 优点:配置简单,容易实现。
  • 缺点:对源系统的性能影响较大,大批量数据同步时会降低甚至拖垮业务系统的性能,不适合从业务系统到数据仓库系统的同步。
1.2 数据文件同步

通过约定好的文件编码、大小、格式等,直接将源系统的生成数据的文本文件通过专门的文件服务器(如FTP服务器)传输到目标系统,然后加载到目标数据库系统中。

优点:当数据源包含多个异构的数据库系统时,用这种方式比较简单、实用。另外,日志类数据通常是以文本文件形式存在的,也适合使用数据文件同步方式。

注意:

  • 通过文件服务器上传、下载可能会造成丢包或错误,为了确保数据文件同步的完整性,需要有一个效验文件,用于验证数据同步的准确性。
  • 在数据文件从源系统中生成时,可以增加压缩和加密功能,提高文件的传输效率和安全性。
1.3 数据库日志解析同步

大多数主流数据库都已经实现了使用日志文件进行系统恢复,因为日志文件信息足够丰富,而且数据格式也很稳定,完全可以通过解析日志文件获取发生变更的数据,从而满足增量数据同步的需求。

数据库中日志文件信息丰富、数据格式稳定,保存了数据记录的变更(增、删、改),当出现故障时,可以通过日志文件进行系统恢复。所以可以通过读取数据库的日志文件,收集变化的数据信息,并判断日志中的变更是否属于被收集的对象,将其解析到目标数据文件中。

优点:数据库日志读取操作是在操作系统层面完成,不需要通过数据库,因此不会给源系统带来性能影响。

缺点:

  • 数据延迟。例如,业务系统做批量补录可能会使数据更新量超出系统处理峰值,导致数据延迟。
  • 投人较大。需要在源数据库与目标数据库之间部署一个系统实时抽取数据。
  • 数据漂移和遗漏。通常是指增量表的同一个业务日期数据中包含前一天或后一天凌晨附近的数据或者丢失当天的变更数据。

二、阿里数据仓库的同步方式

数据仓库的特性之一是集成将不同的数据来源、不同形式的数据整合在一起

阿里数仓数据同步特点:

  • 数据来源多样化。除了结构化数据,还有大量非结构化数据
  • 数据量非常大。阿里(书上提到的)每天需要同步的数据量达到PB级别
2.1 批量数据同步

对于离线类型的数据仓库应用,需要将不同的数据源批量同步到数据仓库,以及将经过数据仓库处理的结果数据定时同步到业务系统。

市场上数据库种类繁多,不同数据库的数据类型都略有不同,而数据仓库是集成各类数据源的地方,所以数据类型必须是统一的。

阿里通过DataX将各类源数据库系统的数据类型统一转换为字符串类型的方式,实现数据格式的统一。

对于不同的数据源,DataX通过插件的形式提供支持,开发者可以在极短的时间内开发一个插件以快速支持新的数据库或文件系统,将数据从数据源读出并转换为中间状态,同时维护好数据的传输、缓存等工作。

2.2 实时数据同步

日志类数据都是实时产生的,所以需要尽快将日志以数据流的方式不间断地同步到数据仓库。或者对业务系统产生的数据进行实时处理,比如天猫“双11”的数据大屏,对所产生的交易数据需要实时汇总,实现秒级的数据刷新。

这类数据是通过解析MySQL的binlog日志来实时获得增量的数据更新,并通过消息订阅模式来实现数据的实时同步。具体来说,就是建立一个体制数据交换中心,通过专门的模块从每台服务器源源不断地读取日志数据,或者解析业务数据库系统的binlog或归档日志,将增量数据以数据流的方式不断同步到日志交换中心,然后通知所有订阅了这些数据的数据仓库系统来获取。

阿里是通过TimeTunnel(TT)消息中间件(具有高性能、实时性、顺序性、高可靠性、高可用性、可扩展性等特点)来实现实时数据同步的。TT是一种基于生产者、消费者和Topic消息标识的消息中间件,将消息数据持久化到 HBase 的高可用、分布式数据交互系统。

三、数据同步遇到的问题与解决方案

3.1 分库分表的处理

问题:业务系统需处理的数据量飞速增长,为了让系统具备灵活的扩展能力和高并发大数据量的处理能力,一些主流数据库采用了分布式分库分表方案来解决,但是这种设计也加大了同步处理的复杂度。

解决方案:通过建立中间状态的逻辑表来整合统一分库分表的访问。

阿里的TTDL(Taobao Distributed Data ayer)就是这样一个分布式数据库的访问引擎。

TDDL是在持久层框架之下、JDBC驱动之上的中间件,它与JDBC规范保持一致,有效解决了分库分表的规则引擎问题,实现了SQL析、规则计算、表名替换、选择执行单元并合并结果集的功能,同时解决了数据库表的读写分离、高性能主备切换的问题,实现了数据库配置信息的统一管理。

3.2 高效同步和批量同步

问题

  • 工作量大,相似且重复的操作会降低开发人员的工作热情
  • 与数据需求方的沟通和流程成本加大

解决方案

  • 配置透明化,自动生成配置信息
  • 简化操作步骤,建表、配置任务、发布、测试操作一键化处理
  • 降低了数据同步的技能门槛,方便数据需求方获取和使用数据

阿里通过OneClick实现数据的一键化和批量化同步。一键完成DDL和DML生成、数据的冒烟测试以及在生产环境中测试等,大大降低了数据同步成本。

3.3 增量与全量同步的合并

问题:表的业务数据库越来越大,按周期全量同步的方式会影响处理效率,甚至不可能做到。

解决方案:每次只同步新变更的增量数据,然后与上一个同步周期获得的全量数据进行合并,从而获得最新版本的全量数据。简而言之,就是增量同步,然后与原数据合并

当前流行的大数据平台基本都不支持 update 操作 ,现在比较推荐的方式是全外连接( full outer join) +数据全量覆盖重新加载( insert overwrite ),例如日调度,则将当天的增量数据和前一天的全量数据做全外连接,重新加载最新的全量数据。

3.4 同步性能的处理

问题

  • 数据同步任务的总线程数达不到用户设置的首轮同步的线程数,可能影响数据同步效率
  • 用户不清楚该如何设置首轮同步的线程数,可能导致CPU资源无法合理使用
  • 同步控制器平等对待接收到的同步线程,导致重要的同步线程因得不到CPU资源而无法同步

上述问题总结下来,就是数据同步任务运行不稳定

解决方案

基于负载均衡思想的数据同步方案。通过目标数据库的元数据估算同步任务的总线程数,以及通过系统预先定义的期望同步速度估算首轮同步的线程数,同时通过数据同步任务的业务优先级决定同步线程的优先级,最终提升同步任务的执行效率和稳定性。

3.5 数据偏移的处理

问题:ODS层表的同一个业务日期数据中包含前一天或后一天凌晨附近的数据,或者丢失当天的变更数据。

ODS表按时间段来切分进行分区存储,通常的做法是按某些时间戳字段来切分,而实际上往往由于时间戳字段的准确性问题导致发生数据漂移。

通常,时间戳字段分为四类:

  • 数据库表中标识数据记录更新时间:modified_time
  • 数据库日志中标识数据记录更新时间:log_time
  • 数据库表中记录业务发生时间:proc_time
  • 标识数据记录被抽取到的时间:extract_time

理论上,上述几个时间应该是一致的,但实际生产中,会出现差异,可能的原因如下:

  • 由于数据抽取需要时间,extract_time往往会晚于前三个时间
  • 前台业务系统手工订正数据时未更新modified_time
  • 由于网络或者系统压力问题,log_time或者modified_time会晚于proc_time

下列的一些做法,可能会导致数据漂移:

根据extract_time来获取数据,数据漂移问题最明显

根据modified_time限制,不更新modified_time导致数据一楼,或者凌晨时间产生的数据记录漂移到后一天

根据log_time限制,由于网络或者系统压力问题,会晚于proc_time,导致凌晨时间产生的数据记录漂移到后一天。

解决方案

  • 多获取后一天的数据,保障数据只多不少
  • 做法:具体的数据切分让下游根据自身不同的业务场景用不同的业务时间proc_time来限制
  • 缺点:存在一些数据误差。例如一个订单是当天支付的,但是第二天凌晨申请退款关闭了该订单,那么这条记录的订单状态会被更新,下游在统计支付订单状态时会出现错误。
  • 通过多个时间戳字段限制时间,获取相对准确的数据
  • 做法:
  • 根据log_time分别冗余前一天最后15分钟的数据和后一天凌晨开始15分钟的数据,并用modified_time过滤非当天数据
  • 根据log_time获取后一天15分钟的数据,按照主键根据log_time做升序排列去重,根据主键去重获取最后状态变化的数据
  • 将前两步的结果数据做全外连接,通过限制业务时间proc_time来获取所需数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决ul元素不能跟div同一行显示的办法

现象如下: html结构如下: 可以看到div和ul是同级元素。 为什么这里ul换行了呢! 这里要敲黑板了! 因为ul是块级元素!也就是独占一行,跟div一样。 如果需要ul跟div在同一行显示,则要求ul前面相…

2023国赛高教社杯数学建模C题思路分析

1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

【论文笔记】Perception, Planning, Control, and Coordination for Autonomous Vehicles

单纯作为阅读笔记,文章内容可能有些混乱。 文章目录 1. Introduction2. Perception3. Planning3.1. Autonomous Vehicle Planning Systems3.2. Mission Planning3.3. Behavioral Planning3.4. Motion Planning3.4.1. Combinatorial Planning3.4.2. Sampling-Based P…

python将手机模拟器截屏并发送至电脑上

电脑上安装手机模拟器,截手机屏幕图片,发送至电脑上,(继而进一步操作,比如图文识别等)。环境:python3.10.4 模拟器:雷电模拟器 模拟器安装路径,我的是:D:\lei…

新AI技术革命:向左走,向右走

前两天阅读到一篇博文,主要是讲海外创业者初创公司的产品情况,整理出来分享给你,如果你也在关注 AI 领域,不妨对照一下。 回归本篇内容正题。 时不时会有朋友问我:有没有一个工具,可以自动完成这系列的工作…

第13章_瑞萨MCU零基础入门系列教程之Common SPI

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

Spark【Spark SQL(二)RDD转换DataFrame、Spark SQL读写数据库 】

从 RDD 转换得到 DataFrame Saprk 提供了两种方法来实现从 RDD 转换得到 DataFrame: 利用反射机制推断 RDD 模式使用编程方式定义 RDD 模式 下面使用到的数据 people.txt : Tom, 21 Mike, 25 Andy, 18 1、利用反射机制推断 RDD 模式 在利用反射机制…

知乎热议!大学开学了,女儿去了浙江上大学,两千生活费够不够?

大家好,我是菜哥! 又到了周末闲聊时间,这几天微博上一个热搜引起了广大网友的关注,那就是“大学开学了,女儿在浙江上大学,给两千生活费够不够?”。 这个话题引起了广泛讨论,很多人都…

C++中的红黑树

红黑树 搜索二叉树搜索二叉树的模拟实现平衡搜索二叉树(AVL Tree)平衡搜索二叉树的模拟实现红黑树(Red Black Tree)红黑树的模拟实现 红黑树的应用(Map 和 Set)Map和Set的封装 搜索二叉树 搜索二叉树的概念:二叉搜索树又称二叉排序树,它或者是一棵空树&…

计算机网络与技术——概述

😊计算机网络与技术——概述 👻前言🥏信息时代下计算机网络的发展🌏互联网概述📡计算机网络基本概念📡互联网发展三阶段📡互联网的标准化 🌏互联网的组成📡互联网的边缘部…

企业ERP和泛微OA集成场景分析

轻易云数据集成平台(qeasy.cloud)为企业ERP和泛微OA系统提供了强大的互通解决方案,特别在销售、采购和库存领域的单据审批场景中表现出色。这些场景涉及到多个业务单据的创建和审批,以下是一些具体的应用场景描述: 采购…

C++ STL教程

C 标准模板库的核心包括:(1)容器(Containers);(2)算法(Algorithms);(3)迭代器(iterators) &#…

第一章 计算机系统概述 一、操作系统的基本概念

一、操作系统的层次结构 二、定义 操作系统是计算机系统中最基本、最重要的软件之一,它是计算机硬件与用户之间的桥梁。它的主要功能是管理计算机系统的资源,包括处理器、内存、外部设备以及数据等。 操作系统的基本概念包括: 资源管理&…

在Postman的脚本中使用pm对象获取接口的请求参数

在Postman的脚本中使用pm对象获取接口的请求参数 1、获取在Query Params中输入的参数全局变量的引用(以在header中引用为例)2、获取在Body中输入的参数3、pm对象常用用法 1、获取在Query Params中输入的参数 query params页面 在tests中写脚本做后置处…

探索 AI+开源的未来:Open Source Congress@日内瓦

注:本文翻译源自 Linux 基金会发布的 Open Source Congress 会议官网内容,蓝色斜字体的段落则为作者参与会议的记录与心得。 Note: This article was translated from the official website of the Linux Foundations Open Source Congress, and the par…

【MySQL系列】MySQL的事务管理的学习(二)_ 再次理解隔离性

「前言」文章内容大致是MySQL事务管理,续上一篇。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 七、再次理解隔离性7.1 数据库并发的场景有7.2 多版本并发控制(MVCC)7.3 三个隐藏字段列7.4 undo日志7.5 模拟MVCC7.6 R…

[Latex]公式编辑,编号、对齐【持】

导言区 \documentclass{article} \usepackage{amsmath,amssymb,amsfonts,}%math-数学公式;symb-数学符号;fonts-字号;环境是否进入数学模式是否接受可选参数是否占满整行是否产生编号备注align是否是是align* 不产生编号,其他与 …

阿里云oss上传视频测试,出现了413错误

阿里云oss上传视频测试,出现了413错误 (1)nginx抛出问题,请求体过大 (2)修改nginx配置,重新加载生效 client_max_body_size 1024m;在cmd下运行命令:nginx.exe -s reload

基于canvas实现图片文字水印生成器

目录 介绍 1.静态页面结构 2.给生成水印按钮绑定点击事件 3.生成水印的函数 总结 介绍 在前端开发中时常会遇到需要给图片加上水印的功能,就像在创作csdn的文章时上传的图片都会打上传作者的水印,我们来探讨一下这个水印是如何生成的。 首先生成的文…

【大数据】CDC 技术:变化数据捕获

CDC 技术:变化数据捕获 1.什么是 CDC ?2.批处理 vs CDC3.四种 CDC 的实现方法3.1 表元信息 Table metadata3.2 表求差 Table differences3.3 数据库触发器 Trigger-based CDC3.4 数据库事务日志 Log-based CDC 4.Oracle CDC 详解4.1 Oracle CDC 机制4.1.…