现今的企业,尤其是那些把数字化转型放在首要位置的企业,迫切需要实时数据。传统的每周和每月批处理已经无法满足需求。然而,要从多个来源获取实时数据,并将其用于自动化流程和动态优化决策并不容易。
最近,在对客户的遗留系统进行重新架构、将单体架构拆分为微服务时,我们遇到了一个挑战。我们开始对数据库进行修改,按模块对系统进行现代化改造。在这个阶段,我们需要确保两个数据库保持同步,因为不同的模块可能需要相同的数据 — 换句话说,旧系统需要新数据库中新系统生成的数据,反之亦然。
我们研究了变更数据捕获(CDC)技术,以确定其是否符合我们的需求。文章详细介绍了CDC的定义、我们测试过的工具、它们的运作方式和优势。同时,我们分享了一些案例和建议,帮助其他技术人员在特定情况下选择适合的CDC工具。
数据捕获是指通过检测和捕获源系统中的变更,然后将这些变更几乎实时地传递到目标系统的过程。这些变更可能包括插入、删除、更新操作以及数据库结构的DDL更改。
CDC工具通过监控源系统中的数据变更来实现其功能。一旦发现变更,CDC工具会捕获并记录在指定位置,如数据库或日志文件。随后,经过处理和转换的数据会被加载到目标系统,如数据仓库或分析平台中。
有多种捕获数据库变更的方法。让我们来看看其中的一些:
在这一方法中,我们会在源中维护一些类似于CREATED_AT、LAST_UPDATED或DATE_MODIFIED的审计列,并通过查询源中的数据来检测这些列中的变化,以此来捕获任何数据的更改。需要注意的是,这种方式并不能记录删除操作。
触发器是数据库中根据特定事件执行操作的函数。尽管可用于捕获任何变更,包括删除操作,但会降低数据库性能,因为每次事件都需要进行多次写入。
数据库包含事务日志用于在发生崩溃时进行恢复,存储所有事件。通过基于日志的CDC,新数据库事务直接从本机日志中读取,这样可以捕获变更,而无需扫描源表,因此更为高效。
这种方法类似于事件驱动架构中的事件溯源,每当系统状态发生变化时,我们将其记录为一个事件。记录的事件可以通过以相同的顺序重播来随时重建系统状态。
根据情况、应用程序、架构和业务需求,CDC在许多场景下都是至关重要的。以下是CDC有助于工程过程的一些方式:
市场上有几种CDC工具,比如Oracle Golden Gate、Debezium、IBM Infosphere、Striim、StreamSets和Qlik Replicate。这些工具可以是开源的或付费的。它们通常支持本地和云环境,并能处理各种数据源。在选择时,考虑以下几点:
随着企业变得以技术为驱动,历史和当前的数据将成为一个至关重要的差异化因素。实现精确、及时、高效和具有成本效益的变更数据捕获将成为任何技术转型计划的重要组成部分。当您面临这种情况时,希望本文能对您有所帮助。
以上是变更数据捕获:概述、原因及优秀实践的详细内容。更多信息请关注PHP中文网其他相关文章!