变更数据捕获:概述、原因及最佳实践

news2024/9/20 14:26:08

当今的企业,尤其是那些已将数字化转型置于优先地位的企业,需要接近实时的数据。每周和每月的批处理已不再适用。然而,从多种来源获取实时数据以自动化流程并做出动态优化决策并非易事。

最近,在为客户重新架构遗留系统并将单体架构拆分为微服务时,我们面临了这个特定的挑战。我们开始为新架构更改数据库,并按模块对系统进行现代化改造。在此阶段,我们需要让两个数据库保持同步,因为不同的模块可能需要相同的数据 — 换句话说,旧系统需要新数据库中新系统生成的数据,反之亦然。

我们探索了变更数据捕获(CDC)来看它是否能实现这一目标。本文深入探讨了CDC的概念、我们探索过的工具、它们的工作原理以及它们的好处。我们还提供了一些例子和建议,指导其他技术人员如何为其特定用例选择合适的CDC工具。

什么是变更数据捕获?

变更数据捕获是检测和捕获源系统(通常是数据库)中的变更,并将这些变更以几乎实时的方式传递到目标系统的过程。这些变更可以是插入、删除、更新以及通过DDL进行的数据库结构更改等。

变更数据捕获工具的工作原理

CDC工具通过持续监控源系统中的数据变更来工作。每当检测到变更时,它会将其捕获并记录到一个单独的位置,比如数据库、日志文件,或发送到消息代理。然后捕获的数据经过处理、转换并加载到目标系统,比如数据仓库、分析平台或另一个数据库中。

有多种捕获数据库变更的方法。让我们来看看其中的一些:

基于时间戳/查询的

在这种方法中,我们在源中维护类似于CREATED_AT、LAST_UPDATED或DATE_MODIFIED的审计列,并查询源中的数据以根据这些列中的变更来捕获任何变化。需要注意的是,这种方法无法捕获删除操作。

基于触发器的

触发器是根据数据库中发生的特定事件执行用户定义操作的函数。这可用于捕获数据库中的任何变更,包括删除操作。然而,这种方法会降低数据库性能,因为每次事件发生时都需要多次写入。

基于日志的

数据库包含用于在崩溃时进行恢复的事务日志(或重做日志),它存储了所有事件。通过基于日志的CDC,新数据库事务是从其本机日志中读取的。这种方式可以捕获变更,而无需扫描源表,因此比其他两种方法更有效。

471426c7e36c80d39ace06465d92f743.png

0*dApfD2WNt-D0fSE0.png

这种方法类似于事件驱动架构中的事件溯源,每当系统状态发生变化时,我们将其记录为一个事件。记录的事件可以通过以相同的顺序重播来随时重建系统状态。

为什么使用CDC?

根据情况、应用程序、架构和业务需求,CDC在许多场景下都是至关重要的。以下是CDC有助于工程过程的一些方式:

实时数据可用性:CDC工具以几乎实时的方式捕获变更,确保最新的数据可用于分析、报告或进一步处理。

更快的决策制定:CDC有助于减少捕获和数据可用性之间的延迟,实现更快的分析和决策制定。

高效的数据集成:CDC工具有助于从多个操作源捕获数据,并将其转换为单一目标数据库或数据湖中的通用格式。

目标数据库的定制设计:CDC提供跨功能的好处,比如在CQRS系统中创建只读搜索或查询数据库、创建审计数据库,或在数据仓库中捕获数据。它允许将非功能性和架构需求与主要数据存储解耦。

简化的数据迁移:在我们的情况下,CDC有助于在现代化阶段维护遗留和新数据库之间的数据一致性。这也适用于其他各种数据迁移场景。

如何选择合适的CDC工具?

市场上有几种CDC工具,比如Oracle Golden Gate、Debezium、IBM Infosphere、Striim、StreamSets和Qlik Replicate。这些工具可以是开源的或付费的。它们通常支持本地和云环境,并能处理各种数据源。在选择时,考虑以下几点:

1.与数据源的兼容性:至少,您选择的工具必须与您想要捕获变更的所有数据源兼容。2.实时数据捕获:工具应该以几乎实时的方式捕获变更,以便您能够使用最新的数据。3.数据转换和集成:CDC工具应该能够处理从源到目标数据类型的数据转换。4.价格:CDC工具必须对您的用例具有成本效益。有开源、付费和许可产品可供选择。5.使用便捷性和支持:工具应该对您的团队易于使用,并提供充分的支持,包括全面的文档和技术支持。6.其他功能:根据您的需求,您可能还想检查其他特定功能,比如源和目标之间的双向同步和云支持。

随着企业变得以技术为驱动,历史和当前的数据将成为一个至关重要的差异化因素。实现精确、及时、高效和具有成本效益的变更数据捕获将成为任何技术转型计划的重要组成部分。当您面临这种情况时,希望本文能对您有所帮助。

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

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

相关文章

强化学习应用(六):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

大模型实战营Day4 XTuner大模型单卡低成本微调实战

FINETUNE简介 LLM下游应用中,增量预训练和指令跟随是经常会用到的两种微调模式 指令跟随微调 使用场景:让模型学会对话模板,根据人类指令进行对话 训练数据:高质量的对话,问答数据 为什么需要指令微调? 因为…

YZ虚拟资源下载源码-支持对接公众号-对接支付

这款系统内置的模板是电脑系统下载站的类型,当然你也可以用作其他类型,例如软件下载,其他类型的资源下载,知识付费下载等,改下文字内容即可。 支持商城系统,后台可配置支付。青狐修改增加了很多可用性。 …

遭受慢速连接攻击怎么办?怎么预防

慢速连接攻击是一种常见的网络攻击方式,其原理是利用HTTP协议的特性,在建立了与Http服务器的连接后,尽量长时间保持该连接,不释放,达到对Http服务器的攻击。 慢速连接攻击的危害包括以下几个方面: 1.资源…

Python Flask教程

Flask Doc: https://rest-apis-flask.teclado.com/docs/course_intro/what_is_rest_api/Github: https://github.com/tecladocode/rest-apis-flask-python 1. 最简单的应用 最小应用 from flask import Flaskapp Flask(__name__)app.route("/") def hello_world()…

Qt6安装教程

由于QT在5.14版本后不再有离线安装版本,均需要通过在线安装 1.下载exe安装包 打开Open Source Development | Open Source License | Qt,往下拉,找到红框所示的按钮 点进去后点击Download即可 2 安装 下载完成后可得到qt-unified-windows…

AI大模型学习笔记一

一、商业观点:企业借助大模型获得业务增长可能 二、底层原理:transformer 1)备注 ①下面每个步骤都是自回归的过程(aotu-regressive):已输出内容的每个字作为输入,一起生成下一个字 ②合起来就…

Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?

技术背景 我们在做Windows平台RTMP推送、轻量级RTSP服务录像模块的时候,部分开发者抱怨路径无法设置中文,只能设置为英文。 以C#的接口为例,早期的设计如下: /** 设置本地录像目录, 必须是英文目录,否则会失败*/[DllI…

软考学习笔记--操作系统-进程管理

进程管理是一个具有独立功能的程序关于数据集合的一次可以并发执行的运行活动,是系统进行资源分配和调度的基本单位。相对于程序,进程是动态的概念,而程序是静态的概念,是指令的集合。进程具有动态性和并发性,需要一定…

SwiftUI之深入解析如何使用SwiftUI Charts创建折线图

一、简单折线图 苹果在 WWWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式,而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线…

Android WiFi Service启动-Android13

Android WiFi Service启动 - Android13 1、SystemServer中入口2、WifiService启动2.1 关键类概要2.2 启动时序图 Android WiFi基础概览 AOSP > 文档 > 心主题 > WiFi概览 1、SystemServer中入口 编译生成对应的jar包:"/apex/com.android.wifi/javalib…

十三、QPalette的简单使用(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在实际应用中,经常需要改变某个控件的颜色外观,如背景、文字颜色等。Qt提供的调色板类 QPalette 专门用于管理对话框的外观显示。QPalette 类相当于对话框或是控件的调色板&…

1222. 密码脱落(dp划分)

题目&#xff1a; 1222. 密码脱落 - AcWing题库 思路&#xff1a; 代码&#xff1a; #include<cstdio> #include<cstring> using namespace std; const int N1010; int f[N][N];//表示以L和R为两端点的字符串的“最长”回文序列长度 char s[N];//存储输入的字符串…

【Docker篇】使用Docker操作镜像

文章目录 &#x1f6f8;镜像&#x1f33a;基本操作⭐docker --help⭐docker pull [ 参数 ]⭐docker images⭐docker save -- 导出⭐docker rmi -- 删除⭐docker load -- 导入 &#x1f6f8;镜像 镜像是指在计算机领域中&#xff0c;通过复制和创建一个与原始对象相似的副本的过…

js逆向第20例:猿人学第19题乌拉乌拉乌拉

文章目录 一、前言二、定位关键参数1、JA3/TLS指纹怎么查看2、加密值长度对比三、代码实现四、参考文献一、前言 任务十九:抓取这5页的数字,计算加和并提交结果 此题在以前用python写逆向代码是存在缺陷的,直到今年有个大佬开源了curl_cffi库,并且支持 JA3/TLS 和 http2 指…

计算机组成原理 CPU的功能和基本结构和指令执行过程

文章目录 CPU的功能和基本结构CPU的功能CPU的基本结构 指令执行过程指令周期概念指令执行方案指令数据流取周期数据流析指周期数据流执行周期数据流中断周期数据流 数据通路的功能和基本结构数据通路的功能数据通路的结构单总线 CPU的功能和基本结构 #mermaid-svg-jr0QOEyC6Q92…

二分图最大匹配——匈牙利算法详解

文章目录 零、前言一、红娘牵线二、二分图最大匹配2.1概念2.2交替路2.3增广路2.4匈牙利算法2.4.1算法原理2.4.2算法示例2.4.3代码实现 3.OJ练习3.1模板3.2棋盘覆盖3.3車的放置 零、前言 关于二分图的基本知识见&#xff1a;二分图及染色法判定 一、红娘牵线 一位红娘近日遇到一…

leetcode 每日一题 2024年01月14日 删除排序链表中的重复元素

题目 83. 删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff…

通信入门系列——微积分中极限、连续、导数、微分、积分

本节目录 一、极限 1、数列极限 2、函数极限 二、连续 三、导数 四、微分 五、积分本节内容 一、极限 1、数列极限 数列极限&#xff1a;设{xn}为一个实数列&#xff0c;A为一个定数。若对任意给定的ε>0&#xff0c;总存在正整数N,使得当n>N时&#xff0c;有|xn-A|<…

探索商超货架场景目标检测性能,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建商超货架场景下亨氏米粉食品种类检测识别系统

在前面的系列博文中&#xff0c;我们陆续应用实践开发了很多有趣的项目&#xff0c;但是在密集排布场景下如商超购物场所内货架上货物种类目标检测模型的开发我们则少有涉及&#xff0c;正值周末&#xff0c;本文的主要目的就是想要实践构建这一场景下的目标检测模型&#xff0…