CDC 数据复制:技术、权衡、见解

推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景

在本文中,我将定义 CDC 数据复制,简要讨论最常见的用例,然后讨论常见技术及其权衡。最后,我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到的一般实现见解。

什么是变更数据捕获 (CDC) 数据复制?

CDC 数据复制是一种在两个数据库之间实时或近乎实时地复制数据的方法,其中仅复制新添加或修改的数据。

它是快照复制的替代方法,快照复制涉及一次又一次地将一个数据库的整个快照移动到另一个数据库。快照复制可能适用于需要随着时间的推移保留其数据的单个快照的组织,但它非常占用大量处理,并且会留下很大的财务足迹。对于不需要这样做的组织,CDC可以节省大量付费处理时间。

可以实时或小批量(例如每小时)捕获数据更改并将其传送到新目的地。

CDC 数据复制:技术、权衡、见解


此图说明了基于日志的 CDC,其中红色行是新添加的数据。

值得一提的是,CDC并不是一个新过程。然而,直到最近,只有大型组织才有工程资源来实施它。新的是越来越多的托管工具选择,使其成本低廉,因此它新近受欢迎。

最常见的CDC用例

本文没有足够的篇幅来涵盖 CDC 数据复制的所有用例,但以下是最常见的三个用例。

用于商业智能和分析的数据仓库

任何运行专有数据收集系统的组织都可能拥有一个生产数据库,用于存储来自此系统的关键信息。

由于生产数据库是为写入操作而设计的,因此它们在将数据投入盈利用途方面没有多大作用。因此,许多组织希望将数据复制到数据仓库中,在那里他们可以运行复杂的读取操作以进行分析和商业智能。

如果您的分析团队需要近乎实时的数据,CDC 是向他们提供数据的好方法,因为它会在更改时快速将更改交付到分析仓库。

数据库迁移

当您从一种数据库技术迁移到另一种数据库技术时,CDC 也很有用,并且您需要在停机时保持所有内容可用。一个典型的例子是从本地数据库迁移到云数据库。

灾难恢复

与迁移案例类似,CDC 是一种高效且可能具有成本效益的方法,可确保在其中一个物理位置停机时,您的所有数据始终在多个物理位置可用。

常见的CDC技术及其权衡

CDC有三种主要的技术,每种技术都有自己的优点和缺点。

CDC 数据复制:技术、权衡、见解


CDC 实施涉及灵活性、保真度、延迟、维护和安全性之间的权衡。

基于查询的 CDC

基于查询的CDC非常简单。使用此技术所做的只是编写一个简单的选择查询以从特定表中选择数据,然后是一些条件,例如“仅选择昨天更新或添加的数据”。假设您已经配置了辅助表的架构,则这些查询将获取此更改的数据,并生成包含该数据的新二维表,该表可以插入到新位置。

优势

  • 高度灵活。允许您定义要捕获的更改以及如何捕获这些更改。这样可以更轻松地以非常精细的方式自定义复制过程。
  • 减少开销。仅捕获满足特定条件的更改,因此它比捕获数据库所有更改的 CDC 便宜得多。
  • 更易于故障排除。如果出现任何问题,可以轻松检查和纠正单个查询。

  • 复杂的维护。必须维护每个单独的查询。例如,如果您的数据库中有几百个表,您可能还需要这么多查询,而维护所有这些查询将是一场噩梦。这是主要缺点。
  • 更高的延迟。依赖于轮询更改,这可能会在复制过程中引入延迟。这意味着您无法使用选择查询实现实时复制,并且需要计划某种批处理。如果您需要使用较长的时间序列(例如客户行为)分析某些内容,这可能不是什么大问题。

基于日志的疾病预防控制中心

我们目前使用的大多数数据库技术都支持集群,这意味着您可以在多个副本中运行它们以实现高可用性。此类技术必须具有某种二进制日志,该日志捕获对数据库的所有更改。在基于日志的 CDC 中,更改是从日志而不是数据库本身读取的,然后复制到目标系统。

优势

  • 低延迟。数据更改可以非常快速地复制到下游系统。
  • 高保真度。日志捕获对数据库的所有更改,包括数据定义语言 (DDL) 更改和数据操作语言 (DML) 更改。这使得跟踪已删除的行成为可能(这在基于查询的 CDC 中是不可能的)。

  • 更高的安全风险。需要直接访问数据库事务日志。这可能会引起安全问题,因为它需要广泛的访问级别。
  • 灵活性有限。捕获对数据库的所有更改,这限制了定义更改和自定义复制过程的灵活性。在自定义要求很高的情况下,必须对日志进行大量后处理。

通常,基于日志的 CDC 很难实现。有关详细信息,请参阅下面的“见解”部分。

基于触发器的疾病预防控制中心

基于触发器的CDC是前两种技术之间的混合。它涉及定义用于捕获表中某些更改的触发器,然后将其插入到新表中并在新表中进行跟踪。正是从这个新表中将更改复制到目标系统。

优势

  • 灵活性。允许您定义要捕获的更改以及如何捕获这些更改(如在基于查询的 CDC 中),包括已删除的行(如在基于日志的 CDC 中)。
  • 低延迟。每次触发触发器时,它都算作一个事件,并且可以实时或近乎实时地处理事件。

  • 极其复杂的维护。就像基于查询的 CDC 中的查询一样,所有触发器都需要单独维护。因此,如果您有一个包含 200 个表的数据库,并且需要捕获所有表的更改,则总体维护成本将非常高。

实施见解

作为一家数据集成公司的首席执行官,我在实施 CDC 方面拥有丰富的经验。以下是我在此过程中学到的一些东西。

不同日志的不同实现

基于日志的 CDC 特别复杂。这是因为所有日志——例如 MySQL 的 BinLog、Postgres 的 WAL 、Oracle 的 Redo Log、Mongo DB 的 Oplog——虽然在概念上相同,但实现方式不同。因此,您需要深入研究所选数据库的低级参数才能使事情正常工作。

将数据更改写入目标

您需要确定如何在目标目标中准确插入、更新和删除数据。

一般来说,插入很容易,但音量在口述方法中起着重要作用。无论您是使用批量插入、数据流还是决定使用文件加载更改,您都将始终面临技术权衡。

为了确保正确更新并避免不必要的重复,您需要在表顶部定义一个虚拟键,该键告诉您的系统应该插入什么以及应该更新什么。

为了确保正确删除,您需要有一些故障保护机制,以确保错误的实现不会导致删除目标表中的所有数据。

维护长时间运行的作业

如果您只传输几行,事情会很容易,但如果是这种情况,那么您可能不需要CDC。因此,一般来说,我们可以预期CDC的工作需要几分钟甚至几小时,这将需要可靠的监测和维护机制。

错误处理

这可能是一篇单独文章的主题。??但是,简而言之,我可以说每种技术都有不同的方法来引发异常和呈现错误。因此,您应该定义一个策略,以便在连接失败时执行的操作。是否应该重试?您应该封装事务中的所有内容吗?

CDC 数据复制:技术、权衡、见解

在内部实施 CDC 数据复制非常复杂,并且非常特定于案例。这就是为什么它传统上不是一种流行的复制解决方案,也是为什么很难就如何实现它提供一般建议的原因。近年来,Dataddo、Informatica、SAP Replication Server 等托管工具显著降低了可访问性的门槛。

不适合所有人,但对某些人来说很棒

正如我在本文开头提到的,CDC有可能为公司节省大量财务资源:

  • 其主数据库主要由不经常更改的数据组成(即每日更改仅占其中数据的相对一小部分)
  • 谁的分析团队需要近乎实时的数据
  • 不需要随着时间的推移保留其主数据库的完整快照

然而,没有完美的技术解决方案,只有权衡。这同样适用于 CDC 数据复制。那些选择实施CDC的人将不得不不平等地优先考虑灵活性,保真度,延迟,维护和安全性。

原文链接:CDC 数据复制:技术、权衡、见解 (mvrlink.com)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++项目:在线五子棋对战(网页版)

项目介绍 本项⽬主要实现⼀个⽹⻚版的五⼦棋对战游戏,其主要⽀持以下核⼼功能: • 用户管理:实现用户注册,用户登录、获取用户信息、用户天梯分数记录、用户比赛场次记录等。 • 匹配对战:实现两个玩家在网页端根据天梯分数匹配游戏对⼿&…

力扣17(电话号码中的字符组合)

题目表述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例1 输入:digits "23" 输出&#xff1…

CSS 的选择器有哪些种类?分别如何使用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 元素选择器(Element Selector)⭐ 类选择器(Class Selector)⭐ ID 选择器(ID Selector)⭐ 后代选择器(Descendant Selector)⭐ 子元素选择器&a…

Android Https

本质:在客户端和服务端使用非对称加密协商出一套对称密钥,每次发送数据前加密,收到后解密,达到加密传输 http ssl 在http之下增加了安全层,用于保障http的加密传输 HTTPS连接 TLS连接步骤 1.客户端发送 client h…

模拟出栈的所有顺序(dfs+回溯)

题目: 已知某一个字母序列,把序列中的字母按出现顺序压入一个栈,在入栈的任意过程中,允许栈中的字母出栈,求所有可能的出栈顺序 示例: 输入abc 输出abc、acb、bac、bca、cba 代码如下 #define _CRT_SECURE…

【APITable】教程:创建并运行一个自建小程序

1.进入APITable,在想要创建小程序的看板页面点击右上角的【小程序】,进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序,选择模板,输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…

用C语言实现定积分计算(包括无穷积分/可自定义精度)

关于严谨性的声明: 在用C语言进行定积分的计算之前,我需要声明以下几点: 一、我们所进行定积分计算的函数都是应当是黎曼可积的,这保证了我们即使均匀地分割区间也保证了积分的收敛性。 二、我们同时还应该认识到,鉴…

stm32 cubemx can通讯(1)回环模式

文章目录 前言一、cubemx配置二、代码1.过滤器的配置(后续会介绍)2.main.c3.主循环 总结 前言 介绍使用stm32cubemx来配置can,本节讲解一个简答,不需要stm32的can和外部连接,直接可以用于验证的回环模式。 所谓回环模…

《golang设计模式》第二部分·结构型模式-01-适配器模式(Adapter)

文章目录 1. 概念1.1 角色1.2 应用场景1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概念 定义一个适配器,帮助原本不能实现接口的类“实现”该接口 1.1 角色 目标(Target):客户端调用的目标接口 被适配者&#xff08…

【kubeadm的配置安装】

目录 一、环境准备二、所有节点安装docker三、部署K8S集群1、查看镜像2、初始化kubeadm方法一:1、修改配置文件2、在线拉取镜像3、初始化 master 方法二、 3、设定kubectl4、所有节点部署网络插件flannel 四、部署 Dashboard1、在 master01 节点上操作 master&#…

韩顺平Linux基础篇

一、课程内容 二、Linux应用领域 一、Linux使用在哪些地方 Linux最强应用:服务器 三、Linux概述 三、Linux和Unix的关系 五、VM和Linux的安装 基本说明 学习Linux需要一个环境,我们需要创建一个虚拟机,然后再虚拟机上安装一个Centos系统来学…

dirsearch_暴力扫描网页结构

python3 dirsearch 暴力扫描网页结构(包括网页中的目录和文件) 下载地址:https://gitee.com/xiaozhu2022/dirsearch/repository/archive/master.zip 下载解压后,在dirsearch.py文件窗口,打开终端(任务栏…