数据技术篇之数据同步

news2024/12/24 0:44:22

第3章 数据同步

1.数据同步基础

在这里插入图片描述

  • 直连同步
(1)什么是直连同步?
	直连同步是指通过定义好的规范接口 API 和基于动态链接库的方式直接连接业务库,如 ODBC/JDBC 等规定了统
一规范的标准接口,不同的数据库基于这套标准接口提供规范的驱动,支持完全相同的函数用和 SQL 实现。
(2)优点
	配置简单、实现容易
(3)缺点及优化
	业务库直连的方式对源系统的性能影响较大,当执行大批量数据同步时会降低甚至拖垮业务系统的性能。如果业务库采取主备策略,则
可以从备库抽取数据,避免对业务系统产生性能影响。但是当数据量较大时,采取此种抽取方式性能较差,不太适合从业务系统到数据
仓库系统的同步。
(4)适用场景
	比较适合操作型业务系统的数据同步。

在这里插入图片描述

  • 数据文件同步
(1)什么是数据文件同步
	数据文件同步通过约定好的文件编码、大小、格式等,直接从源系统生成数据的文本文件,由专门的文件服务器,如 FTP 服务器传输到
目标系统后,加载到目标数据库系统中。
(2)优点
	在从源系统生成数据文件的过程中,可以增加压缩和加密功能,传输到目标系统以后,再对数据进行解压缩和解密 这样可以大大
提高文件的传输效率和安全性。
(3)缺点及优化
	由于通过文件服务器上传、下载可能会造成丢包或错误,为了确保数据文件同步的完整性,通常除了上传数据文件本身以外,还会上传一
个校验文件,该校验文件记录了数据文件的数据量以及文件大小等校验信息,以供下游目标系统验证数据同步的准确性。
(4)适用场景
	当数据源包含多个异构的数据库系统(如 MyS QL Oracle QL Server DB2 等)。另外,互联网的日志类数据,通常是以文本文件形式存
在的,也适合使用数据文件同步方式。

在这里插入图片描述

  • 数据库日志解析同步
(1)什么是数据库日志解析同步
	通过解析日志文件获取发生变更的数据,从而满足增量数据同步的需求。
(2)优点
	数据库日志解析同步方式实现了实时与准实时同步的能力,延迟以控制在毫秒级别,并且对业务系统的性能影响也比较小。
(3)缺点
	① 数据延迟。例如,业务系统做批量补录可能会使数据更新量超出系统处理峰值,导致数据延迟。
	② 投人较大。采用数据库日 抽取的方式投入较大,需要在源数据库与目标数据库之间部署一个系统实时抽取数据。
	③ 数据漂移和遗漏。数据漂移,一般是对增量表而言的,通常是指该表的同一个业务日期数据中包含前一天或后一天凌晨附近的数据
	或者丢失当天的变更数据。
(4)适用场景
	目前广泛应用于从业务系统到数据仓库系统的增量数据同步应用之中。

在这里插入图片描述

2.阿里数据仓库的同步方式

在这里插入图片描述

   阿里数据仓库的数据同步特点是数据来源的多样性和数据量巨大。因此需要针对不同的数据源类型和数据应用的时效性要求采取不同的策略。

  • 批量数据同步

   针对将不同的数据源批量同步到数据仓库,以及将经过数据仓库处理的结果数据定时同步到业务系统,阿里巴巴提出了DataX。DataX可接入的数据源如下图所示。
在这里插入图片描述

(1)DataX是什么?
	DataX是一个个能满足多方向高自由度的异构数据交换服务产品。
(2)工作原理及构成
	对于不同的数据源, DataX 通过插件的形式提供支持,将数据从数据源读出并转换为中间状态,同时维护好数据的传输、缓存
等工作。数据在 DataX 中以中间状态存在, 并在目标数据系统中将中间状态的数据转换为对应的数据格式后写入。
	DataX 采用 Framework+Plugin 的开放式框架实现, Framework 处理缓冲、流程控制、并发、上下文加载等高速数据交换的大部分技术问
题,并提供简单的接口与插件接人。插件仅需实现对数据处理系统的访问,编写方便,开发者可以在极短的时间内开发 个插件以快速支持新
的数据库或文件系统。数据传输在单进程(单机模式)/多进程(分布式模式)下完成,传输过程全内存操作,不读写磁盘,也没有进间通
信,实现了在异构数据库或文件系统之间的高速数据交换。

在这里插入图片描述

Job :数据同步作业
Splitter :作业切分模块,将一个大任务分解成多个可以并发行的小任务
Sub-Job :数据同步作业切分后的小任务,或称之为 Task
Read er :数据读人模块,负 运行切分后的小任务,将数据从源系统 载到 DataX
Channel: Reader Writer 通过 Channel 交换数据。
Writer :数据写出模块,负责将数据从 DataX 导人目标数据系统。

  • 实时数据同步
      实时数据同步就是建立 个日志数据交换中心,通过专门的模块从每台服务器源源不断地读取日志数据,或者解析业务数据库系统的 binlog 或归档日志,将增量数据以数据流的方式不断同步到日志交换中心,然后通知所有订阅了这些数据的数据仓库系统来获取。阿里巴巴的TimeTunnel (TT )系统就是这样的实时数据传输平台,具有高性能、实时性、顺序性、高可靠性、高可用性、可扩展性等特点
(1)TT是什么?
	TT 是一种基于生产者、消费者和 Topic 消息标识的消息中间件,将消息数据持久化到 HBase 的高可用、分布式数据交互系统。

在这里插入图片描述

生产者 :消息数据的产生端,向 TimeTunnel 集群发送消息数据,就是图中的生产 Client。
消费者:消息数据的接收端,从 TimeTunnel 集群中获取数据进行业务处理。
Topic :消息类型的标识,如淘宝 acookie 日志下的 Topic为taobao_acookie 生产 Client 和消费 Client 需要知道对应的Topic名字。
Broker模块: 负责处理客户端收发消息数据的请求,然后往HBase 取发数据

3.数据同步遇到的问题与解决方案

在这里插入图片描述

  • 分库分表的处理

(1)问题

  随着数据量的增加,需要系统具备灵活的扩展能力和高并发大数据了的处理能力,目前一些主流数据库都提供了分布式分库分表的方案来解决这个问题。但是分库分表却增加了数据同步处理的复杂度。

(2)解决方案

  阿里巴巴的 TDDL ( Taobao Distributed Data ayer )就是这样一个分布式数据库的访问引擎,通过建立中间状态的逻辑表来整合统一分库分表的访问。
  TDDL是在持久层框架之下、JDBC驱动之上的中间件,它与JDBC规范保持一致,有效解决了分库分表的规则引擎问题,实现了 SQL解析、规则计算、表名替换、选择执行单元并合并结果集的功能,同时解决了数据库表的读写分离、高性能主备切换的问题,实现了数据库配置信息的统一管理。

在这里插入图片描述

  • 高效同步和批量同步

(1)问题

  随着业务的发展和变化,会新增大批量的数据同步,使用传统方式每天去完成成百上千的数据同步工作,一方面,工作量会特别方面,相似并且重复的操作会降低开发人员的工作热情。
  数据仓库的数据源种类特别丰富,遇到不同类型的数据源同步就要求开发人员去了解其特殊配置。
  部分真正 的数据需求方,如 Java 开发和业务运营,由于存在相关数据同步的专业技能门槛,往往需要将需求提交给数据开发方来完成,额外增加了沟通和流程成本。

(2)解决方案

阿里巴巴数据仓库研发了 OneClick 产品:
  对不同数据源的数据同步配置透明化,可以通过库名和表名唯定位,通过 IDB 接口获取元数据信息自动生成配置信息。
  简化了数据同步的操作步骤,实现了与数据同步相关的建表、配置任务、发布、测试操作一键化处理,并且封装成 Web 接口进一步达到批量化的效果。
  降低了数据同步的技能门槛,让数据需求方更加方便地获取和使用数据。

注:IDB 是阿里巴巴集团用于统一管理 MySQL 、OceanBase、PostgreSQLacle、SQL Server 等关系型数据库的平台,它是一种集数据管理、结构管理、诊断优化、实时监控和系统管理于一体的数据管理服务;在对集团数据库表的统一管理服务过程中, IDB 产出了数据库、表、字段各个级别元数据信息,并且提供了元数据接口服务。

  • 增量与全量同步的合并

(1)问题

  在传统的数据整合方案中,合并技术大多采用 merge 方式( update+insert );但是当前流行的大数据平台基本都不支持update 操作

(2)解决方案

  现在比较推荐的方式是全外连接( full outer join) +数据全量覆盖重新加载( insert overwrite ),即如日调度,则将当天的增量数据和前一天的全量数据做全外连接,重新加载最新的全量数据。

  • 同步性能的处理

(1)问题

针对数据同步任务 一般首先需要设定首轮同步的线程数,然后运行同步任务。这样的数据同步模式存在以下几个问题:
  有些数据同步任务的总线程数达不到用户设置的首轮同步的线程数时,如果同步控制器将这些同步线程分发到 CPU 比较繁忙的机器上,将导致这些同步任务的平均同步速度非常低,数据同步速度非常慢。
  用户不清楚该如何设置首轮同步的线程数,基本都会设置成一个固定的值,导致同步任务因得不到合理的CPU 资源而影响同步效率。
  不同的数据同步任务的重要程度是不一样的,但是同步控制器平等对待接收到的同步线程,导致重要的同步线程因得不到CPU资源而无法同步。
上述数据同步模式存在的几个问题导致的最终结果是数据同步任务运行不稳定。

(2)解决方案

针对数据同步任务中存在的问题,阿里巴巴数据团队实践出了一套基于负载均衡思想的新型数据同步方案。该方案的核心思想是通过目标数据库的元数据估算同步任务的总线程数,以及通过系统预先定义的期望同步速度估算首轮同步的线程数,同时通过数据同步任务的业务优先级决定同步线程的优先级,最终提升同步任务的执行效率和稳定性。
  具体实现步骤如下:
  ① 用户创建数据同步任务,并提交该同步任务。
  ② 根据系统提前获知及设定的数据,估算该同步任务需要同步的数据量、平均同步速度、首轮运行期望的线程数、需要同步的总线程数。
  ③ 根据需要同步的总线程数将待同步的数据拆分成相 等数量的数据块,一个线程处理 个数据块,并将该任务对应的所有线程提交至同步控制器。
  ④ 同步控制器判断需要同步的总线程数是否大于首轮运行期望的线程数,若大于,则跳转至⑤若不大于,则跳转至⑥。
  ⑤ 同步控制器采用多机多线程的数据同步模式,准备该任务第一轮线程的调度,优先发送等待时间最长、优先级最高且同 任务的线程。
  ⑥ 同步控制器准备一定数据量(期望首轮线程数-总线程数)的虚拟线程,采用单机多线程的数据同步模式 ,准备该任务相应实体线程和虚拟线程的调度,优先发送等待时间最长、优先级最高且单机 PU 剩余资源可以支持首轮所有线程数且同 任务的线程,如果没有满足条件的机器,则选择 CPU 剩余资源最多的机器进行首轮发送。
  ⑦ 数据任务开始同步,并等待完成。
  ⑧ 数据任务同步结束。

  • 数据漂移的处理

(1)什么是数据漂移

数据漂移是ODS数据的一个顽疾,通常是指ODS(通常我们把ong源系统同步进入数据仓库的第一层数据成为ODS或staging层数据,阿里统称为IDS)表的同一个业务日期数据中包含前一天或后一天凌晨附近的数据或则丢失当天的变更数据。

(2)产生数据漂移的原因

由于 ODS 需要承接面向历史的细节数据查询需求,这就需要物理落地到数据仓库的 ODS 表按时间段来切分进行分区存储 ,通常的做法是按某些时间戳字段来切分,而实际上往往由于时间戳字段的准确性问题导致发生数据漂移

通常,时间戳字段分为四类:
  数据库表中用来标识数据记录更新时间的时间戳字段(假设这类字段叫 modified time )
  数据库日志中用来标识数据记录更新时间的时间戳字段·(假设这类宇段叫 log_time)
  数据库表中用来记录具体业务过程发生时间的时间戳字段 (假设这类字段叫 proc_time)
  标识数据记录被抽取到时间的时间戳字段(假设这类字段extract time)
理论上,这几个时间应该是一致的,但是在实际生产中,这几个时间往往会出现差异,可能的原因有以下几点
  由于数据抽取是需要时间的, extract_time 往往会晚于前三个时间。
  前台业务系统手工订正数据时未更新 modified_time
  由于网络或者系统压力问题, log_time 或者 modified_time 会晚于proc_time
通常的做法是根据其中的某 个字段来切分 ODS 表,这就导致产生数据漂移。

(3)解决方案

①多获取后一天的数据
②通过多个时间戳字段限制时间来获取相对准确的数据

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

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

相关文章

gnulib源码安装

接上文《autoconf-archive源码安装》, 链接如下: autoconf-archive源码安装_蓝天居士的博客-CSDN博客 上篇文章在构建autoconf-archive的时候,第一步引导构建就出现了错误,如下所示: $ ./bootstrap.sh ./bootstrap…

SSM+Mysql实现的大学校园兼职系统(功能包含注册登录,发布兼职、个人中心、论坛交流、系统公告、查看兼职信息、查看用户信息、私聊等)

博客目录SSMMysql实现的大学校园兼职系统实现功能截图系统功能使用技术代码完整源码SSMMysql实现的大学校园兼职系统 本系统是一个在线的大学校园兼职系统,商家可以在上面发布自己的兼职,学生可以根据自己的需要,联系兼职,给学生…

JavaScript 中如何实现并发控制?

一、并发控制简介 在日常开发过程中,你可能会遇到并发控制的场景,比如控制请求并发数。那么在 JavaScript 中如何实现并发控制呢?在回答这个问题之前,我们来简单介绍一下并发控制。 假设有 6 个待办任务要执行,而我们…

Kubernetes HPA 动态弹性扩缩容

1.HPA 1.1HPA介绍 1.在Kubernetes中,HPA自动更新工作负载资源(例如:Deployment或者StatefulSet),目的是自动扩缩工作负载以满足需求,水平扩缩意味着对增加的负载的响应是部署更多的 Pod,与垂直…

算法工程师深度解构ChatGPT技术

引言 | 本栏目特邀腾讯知名语言文本项目算法工程师冉昱、薛晨,用专业视野带你由浅入深了解ChatGPT技术全貌。它经历了什么训练过程?成功关键技术是什么?将如何带动行业的变革?开发者如何借鉴ChatGPT思路和技术,投入到日…

西门子PLC S7-1500产生精确时间戳及各种数据处理的方法

目录 1、完整程序 2、将时钟转换成整型数 3、获取相对时间 4、转成微秒(μs),并转成32位无符号整数 5、翻转的问题 6、有时间戳采集时的对时机制 在数据采集时,精准的相对时间是非常重要的。尤其是高速采集时,上位…

算法训练第四十五天 | LeetCode 70、322、279背包问题

LeetCode 70爬楼梯 题目简析: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路分析: 用完全背包的思路来做,见注释 //普通dppublic int climbStairs(in…

Redis框架(四):大众点评项目 基于Redis的短信登录

大众点评项目 基于Session的短信登录需求:基于Redis实现短信验证登录基于Redis的短信登录实战优化为Redis login方法配置拦截器实现双重验证配置类实现异步/排序 拦截结果展示SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会…

【图像处理】DWT图像处理【含Matlab源码 198期】

⛄一、数字图像处理简介 图像处理基础教程链接 1 【基础教程】基于matlab图像处理(表示方法数据结构基本格式类型转换读取点运算代数运算)【含Matlab源码 834期】 2 【基础教程】基于matlab图像处理(读写显示运算转换变换增强滤波分析统计&a…

jvm学习笔记(一)----jvm简史

文章目录1. JVM简单介绍2. java虚拟机介绍1. JVM简单介绍 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏…

ASP.NET微信快速开发框架源码【源码分享】

ASP.NET微信快速开发框架源码 微信公众平台快速开发框架源码 需要源码学习,查看文末卡片获取,或私信我。 框架主要技术: ASP.NET MVC5、ASP.NET Identity、Bootstrap、KnockoutJs、Entity Framework等。 主要特色: 1、快速迭代开…

Redis主从复制原理

前面的文章中我们演示过Redis主从配置的操作,可以查看之前的博文Redis主从配置教程。这篇文章主要介绍一下Redis主从复制的工作过程和原理。 Redis复制工作过程 Redis复制的工作过程如上图,主要包含以及几个阶段: 1. 设置IP端口并建立连接 …

C++学习笔记(十九)——stack和queue的模拟实现

容器适配器 deque的简单介绍 stack的模拟实现 queue的模拟实现 容器适配器 适配器:一种设计模式,该种模式是将一个类的接口转换成客户希望的另外一个接口. stack和queue的底层结构 可以看出的是,这两个容器 相比我们之间见过的容器多了一个模板参数,也就是容器类的模板参数,…

数据结构复习+答案

一、选择题:(每小题2分,共30分) 1、在数据的逻辑结构中,树结构和图结构都是( ) A.非线性结构 B.线性结构 C.动态结构 D.静态结构 2.在一个长度为n的顺序表中插入一个元素的算法的时间复杂度为&…

ThinkPHP文件包含漏洞分析

出品|长白山攻防实验室(ID:A_Tree) 0x00 声明 以下内容,来自长白山攻防实验室的A_Tree作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室…

全宇宙最强AI 聊天机器人模型ChatGPT惊艳来袭,你还不上车?居然能写演讲稿和帮忙写代码

目录1、ChatGPT介绍2、ChatGPT如何注册,国内不可用3、VS Code下载安装ChatGPT3.1 打开VS Code找到ChatGPT3.2 ChatGPT 详细安装步骤:3.3 用法3.4 国外模式’ 此模式下,速度会比较稳定,如果有条件,建议使用本模式。 理论…

大数据HDFS凭啥能存下百亿数据?

前言 大家平时经常用的百度网盘存放电影、照片、文档等,那有想过百度网盘是如何存下那么多文件的呢?难到是用一台计算机器存的吗?那得多大磁盘啊?显然不是的,那本文就带大家揭秘。 分布式存储思想 既然一台机器的存储…

Spring 核心与设计思想 · Spring IoC容器 · 控制反转式程序开发 · DI概念

Spring 是什么?一、什么是容器?二、什么是 IoC?2.1 传统程序开发2.2 控制反转式程序开发2.3 对比总结规律三、理解 Spring IoC四、DI 概念说明Spring 是什么? 我们通常说的 Spring 是指 Spring Framework(Spring 框架…

【Mysql】知识体系结构构建以及常见考题汇总

【Mysql】知识体系结构构建以及常见考题汇总1、基本SQL知识1.1、D_L语法以及表中常用约束1.2、mysql表列常用数据结构1.3、事务(此处展示并发事务问题以及解决方案、实现原理见2.3)read uncommitted有脏读问题read committed解决脏读、有不可重复读问题r…

Android基础学习(二十)—— 线程安全

1、Android中线程的常见用法 (1)继承 Thread class MyThread extends Thread{Overridepublic void run(){//处理具体的逻辑} } new MyThread().start(); //启动此线程//使用匿名类 new Thread(){Overridepublic void run(){//处理具体的逻辑} }.star…