关于全量与增量 的思考
一、数据同步:全量与增量
1.背景
数据如果保留多份,就会存在一致性问题,就需要同步,同步分为两大类:全量和增量
2. 概述
数据如果要保留副本,要么同时写(就是多写),或者进行复制:异步写(即从主数据拷贝到副本);
同时写(多写),引出一个问题,写多少节点算成功(场景:分布式系统)?全部写成功才算成功,还是写大多数成功算成功,还是写指定几个节点算成功?
异步写的话,如果采用异步复制,那么实时性需要考量的话,就需要采用性能优先的架构。
3.同步方式
数据同步一般分为两种方式:全量和增量。
3.1 全量
全量,这个很好理解。就是每天定时(避开业务高峰期)或者周期性全量把数据从一个地方拷贝到另外一个地方;
全量的话,可以采用直接全部覆盖(使用“新”数据覆盖“旧”数据);或者走更新逻辑(覆盖前判断下,如果新旧不一致,就更新);
这里面有一个隐藏的问题:如果采用异步写,主数据物理删除了,怎么直接通过全量数据同步?这就需要借助一些中间操作日志文件,或者其他手段,把这些“看不到”的数据记录起来。
3.2 增量
增量的基础是全量,就是你要使用某种方式先把全量数据拷贝过来,然后再采用增量方式同步更新。
增量的话,就是指抓取某个时刻(更新时间)或者检查点(checkpoint)以后的数据来同步,不是无规律的全量同步。这里引入一个关键性的前提:副本一端要记录或者知道(通过查询更新日志或者订阅更新)哪些更新了。
3.2.1 确定更新点
采用更新时间戳、有的采用checkpoint等来标识和记录更新点。
二、能用全量别用增量
两个系统之间需要同步数据,同步的方法可以分为全量和增量两种形式。多年的经验告诉我,能用全量就别用增量。增量有三个问题
- 数据提供方,很难制作增量包,事无巨细都要记录,稍微记错就全完了
- 数据接收方,理解并且实施增量包的逻辑比较复杂
- 中间过程一旦出了问题,很难定位
这里为了方便讨论,假设有两个系统,其中系统A拥有全深圳所有纳税人的当月工资,系统B需要从系统A同步这个数据。对于系统A来说,它的数据在不停的变化,但是可以分成三类
- 新增,比如说有毕业生来深圳打工
- 删除,比如说有人离职离开深圳了
- 变化,比如说有人涨工资了
这个时候,同步数据的方法很难决策,全量同步不合适,数据量太大而且还不值当,毕竟变化的部分比较少。增量同步又怕麻烦,一旦某次同步出问题,很难倒查故障和恢复。
其实,可以有一种折中方案,上不了台面,但是值得尝试。为了方便理解,还是以上面的例子来讨论。
我们知道所有人都有身份证号码,其中有一部分为年月日,表示生日。我们按照生日,在系统A将数据进行分组,这个分组是逻辑上的,不是真实的。如果有个人,工资涨了,生日为1999.9.1,那么系统A就记录分组1999.9.1的数据发生了变化。假设两个系统之间的同步周期是每天同步一次,那么系统A只需要整理这段时间那些分组发生了变化,但是不用记录变化的实际内容。系统B就老老实实将发生变化的分组数据删掉,然后全量同步这些分组的数据。
这个方案,就是赌每天发生变更的数据不会那么巧,波及所有分组,只会有很小的一部分分组发生变化。这样从整体看,只是同步了部分数据,从分组看又是简单的全量同步。这个方案的巧妙之处就是选择合适的分组标准,既要分的足够细,又要足够直接,方便程序处理。
三、数据全量同步有可能造成的严重问题--血的教训
数据同步在垮产品或者垮系统之间是经常用到的,且经常是不得不用的;这种地方是最容易产生
关于全量与增量 的思考相关推荐
- hive全量与增量~的思考
1.背景 数据如果保留多份,就会存在一致性问题,就需要同步,同步分为两大类:全量和增量 2. 概述 数据如果要保留副本,要么同时写(就是多写),或者进行复制:异步写(即从主数据拷贝到副本): 同时写( ...
- Python实现目录文件的全量和增量备份
目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...
- MySQL数据以全量和增量方式,向ES搜索引擎同步流程
本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...
- Sqoop导出模式——全量、增量insert、更新update的介绍以及脚本示例
背景信息 SQOOP支持直接从Hive表到RDBMS表的导出操作,也支持HDFS到RDBMS表的操作, 当前需求是从Hive中导出数据到RDBMS,有如下两种方案: Ø 从Hive表到RDBMS表的 ...
- Linux随笔19-MySQL主从复制、Percona XtraBackup实现全量和增量备份、ProxySQL实现读写分离
Contents 1. MySQL5.7实现主从复制 1.1 基础环境 1.2. 配置主从复制 1.2.1. master节点上的配置 1.2.2. slave节点上的配置 1.2.3. 中继日志问题 ...
- mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong
GitHub - levonmo/mongo-sync-elasticsearch: mongodb数据同步到elasticsearch的中间件,支持全量,增量(新增修改删除),实时同步等多种同步情景 ...
- MySQL数据库全量、增量备份与恢复
MySQL数据库全量.增量备份与恢复 数据库备份的重要性 在生产的环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果. 造成数据丢失的原因 程序错误 人为商店 计算机失败 磁盘失败 ...
- DataX oracle同步mysql(全量和增量)
本篇博客说说DataX如何进行全量和增量数据同步,虽然用演示oracle同步到mysql,但其他数据库之间的同步都差不多 1.DataX介绍 DataX 是一个异构数据源离线同步工具,致力于实现包括关 ...
- xtrabackup安装、进行全量备份增量备份
文章目录 xtrabackup安装 xtrabackup 常用命令 全量备份 模拟删库 做软连接 恢复数据 增量备份 停掉服务删除目录进行数据一致性 恢复数据库 xtrabackup安装 xtraba ...
最新文章
- CTFshow php特性 web92
- Apache(httpd)配置--防盗链配置和访问控制
- 【转】VS TFS源码分析软件PATFS使用方法一:配置团队项目
- java怎么使用泛型_java泛型 7 泛型的基本介绍和使用
- 李宏毅《机器学习》完整版笔记发布
- html 浏览器文档模式,调整:浏览器模式lE8十文档模式8是怎样操作
- Redis主从配置,哨兵,集群的设计原理
- 在埋头写程序学技术的同时,有没有想到你们的老板和上司在搞什么?
- GBase 8c 迁移工具 DMT 简述
- 什么是沾包?如何处理?
- Android 7.0 Doze模式分析
- 【软件工程】软件工程系统开发——系统设计概述
- 怎样在word中画横线
- html日历页面节假日_html+css+js实现一个简易日历
- 简单入门排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,堆排序,归并排序)
- tensorflow模型ckpt如何查看输入输出节点,以及转uff模型
- 概率分布:Bernoulli分布,二项分布,multinoulli分布和多项分布
- Mini LED,显示技术的春天?!
- 关于onMeasure(转载)
- AndroidUtilCode 最强大的工具类
热门文章
- u盘数据恢复软件哪个好?免费软件有哪些?
- 大数据矩阵计算基础(二):R、Excel、Matlab中矩阵操作
- (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]
- 计算机开机出现ROM,求助电脑开机问题
- mysql redo 物理复制 彭立勋_MySQL基础技能与原理——基本原理.ppt
- 《C/C++ 面试 100 例》(十一)标准输入加速
- Proteus8.15(集电路仿真、PCB设计件和虚拟模型仿真于一体)工具的安装使用
- c语言中汉字编码,【C语言学习】C语言汉字编码。。。C语言中汉字的输入
- 《环球》杂志|“宇宙级”漏洞过后,一个技术总裁的忠告……
- 集合 - Java篇