净变更模式:数据集成的实用指南
在数据集成过程中,捕获源应用程序中的变更数据是设计的基础环节。接下来将探讨数据集成中净变更捕获的关键考量因素,并介绍四种常见的净变更模式。
1. 净变更捕获的关键考量因素
在设计净变更捕获机制时,有多个重要因素需要考虑:
1.
效率
:高效的净变更方法应根据集成过程的需求,尽量减少消息的数量和大小,以减轻网络和相关应用程序的负担,提升集成性能,降低出错概率并简化故障排查。
2.
可靠性
:强大的集成过程需确保捕获并发布所有符合标准的记录修改和业务事件,否则会导致数据完整性问题和业务流程中断。
3.
防止反弹
:在两个应用程序同步数据时,常出现反弹或回显问题。防止反弹依赖于忽略集成过程产生的变更的能力。
4.
实时处理
:许多集成过程要求在数秒或数分钟内处理变更,这对需要低延迟同步数据或涉及时间敏感业务流程的场景尤为重要。
5.
事务排序
:跨多个应用程序的业务流程通常涉及多个事务的依赖关系,事务处理的顺序至关重要。确保事务的正确排序可避免不必要的错误并减少重试处理。
6.
按需应用支持
:按需或软件即服务(SaaS)应用程序通常不允许访问数据库层,限制了建立净变更机制的选项。许多按需应用程序提供商还会限制客户在一段时间内的信息请求数量,因此高效处理尤为重要。
7.
删除支持
:某些设计模式对记录删除的捕获支持有限或无支持。
8.
保证消息传递
:仅发布变更记录或业务事务是不够的,端到端集成过程中需构建机制确保所有记录都得到充分处理。
9.
多播支持
:许多集成过程涉及两个以上的应用程序,变更记录或事务可能需要发布并处理到两个或更多应用程序。
2. 四种常见的净变更模式
2.1 模式 1:应用程序发布者
此模式利用源应用程序内的功能,根据源应用程序中特定事件的发生主动发布变更。该方法通常借助应用程序内的工作流功能,在很多方面类似于数据库触发器,但在应用程序层面发挥作用。
2.1.1 优点
- 提供实时、事件驱动的变更通知,无需对应用程序或数据库服务器进行轮询,无额外开销。
- 通常支持删除操作。
- 一般是高度可靠的方法,很少会遗漏数据变更或事件。
2.1.2 缺点
- 需要特定应用程序和适配器的发布者支持,只有应用程序架构提供变更通知或回调功能时才能使用,大多数应用程序架构不支持此功能。
- 此模式可能不支持按用户过滤以防止反弹。
2.1.3 实施提示
- 变更通常按发生顺序排队,但不保证。可能需要设计集成过程来处理乱序消息,包括构建重试机制。
- 若要一起发送标题/行项目(或主/明细)变更,需确定所需的行项目变更是否总会触发标题通知。若否,也需考虑行项目变更的通知。可配置标题/行项目和仅行项目变更返回相同结构的消息。捕获标题/行项目变更的首选方法是等待特定用户请求的操作(如点击提交按钮),以防止系统在输入或修改标题和多个行项目时发送多条消息。
以下是模式 1 的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(源应用程序):::process -->|特定事件发生| B(应用程序发布者):::process
B -->|发布变更| C(集成处理):::process
C -->|处理变更| D(目标应用程序):::process
2.2 模式 2:修改标志
该模式通过切换同步标志或字段来跟踪变更,源应用程序数据变更时标志关闭,变更在目标应用程序处理后标志打开。此方法依赖应用程序(或源系统)逻辑,在每次变更时切换同步标志。最常见的实现方式是在源应用程序数据库中创建数据库触发器和影子表。
2.2.1 优点
- 通过在基表记录删除后保留影子表记录来支持删除操作。
- 支持双向集成,通过可靠的忽略用户机制防止反弹。
- 通过提供多个同步状态字段支持变更的多播。
- 具有内在的重试机制,因为记录在成功处理到目标应用程序之前不会被标记为已同步,无需单独的拒绝行表和集成过程。
2.2.2 缺点
- 如果应用程序无法配置为在每次插入和更新时切换字段值,可能需要数据库引擎触发器,这要求数据库引擎支持触发器。
- 数据库触发器方法需要详细了解物理数据库架构以开发脚本和触发器,还需要掌握触发器编码知识。
- 这是一种轮询机制,本质上效率较低,因为无论是否有源变更,查询过程都会执行。
- 使用触发器和影子表方法需要直接连接到数据库。
- 应用程序升级时,触发器可能会受到影响或被删除,需保存触发器脚本以便重新应用。
2.2.3 实施提示
- 应用程序逻辑或触发器代码应设计为忽略由指定“集成用户”应用的变更(不切换同步标志)。
- 可在源查询中构建重试超时机制,通过比较记录修改日期/时间戳与当前时间减去 x 分钟来配置在超过 x 分钟后停止。
以下是模式 2 的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(源应用程序):::process -->|数据变更| B(数据库触发器):::process
B -->|更新影子表| C(影子表):::process
D(查询影子表):::process -->|获取变更记录| E(集成处理):::process
E -->|处理变更| F(目标应用程序):::process
F -->|处理成功| C(影子表):::process
2.3 模式 3:修改日期/时间戳
该模式使用基表或对象中的修改日期/时间戳字段来识别已变更的记录。当源应用程序中的记录添加或更改时,日期/时间戳会更新。通过运行查询并使用上次查询执行时的源系统时间作为“绑定变量”,可返回自上次查询以来更新的记录。
2.3.1 优点
- 支持向多个系统多播变更,因为多个源查询的绑定变量可独立跟踪。每个不同的集成过程必须维护其上次查询执行的日期和时间。
- 如果应用程序表已包含修改日期/时间字段,设置简单。
- 可与任何支持过滤查询的应用程序 API 或数据源一起使用,无需直接连接到 SQL 数据库,适用于按需应用程序环境。
2.3.2 缺点
- 对于双向同步过程可能不完全可靠,为防止反弹,需要实现“忽略用户”过滤器,但可能导致错过更新。
- 如果修改日期字段未使用源数据库服务器(或适当的应用程序服务器)的时钟设置,会出现时钟同步问题。
- 需要构建额外功能来支持对目标应用程序重试被拒绝的记录。
- 通常不支持删除操作,若应用程序执行“软删除”,删除操作可能可用,但不可靠,因为软删除的清理通常不可预测。
- 如果同时跟踪父记录和子记录的变更,源查询会变得复杂,需要检查父记录和子记录的修改时间戳。
2.3.3 实施提示
- 使用此模式的集成过程必须包含捕获未成功处理到目标应用程序的记录以进行重试的机制,可通过消息队列处理记录或维护拒绝行表或文件来实现。
- 确保修改字段同时包含日期和时间,若只有日期,同步频率不能超过每天一次。
- 确保修改字段基于数据库(或应用程序)服务器,若使用网络客户端计算机的时钟设置修改时间戳字段,会导致时钟不同步的问题。
- 若实现双向同步,可研究是否能抑制来自其他应用程序的变更对修改时间戳字段的更新,若可以,无需使用 ModifiedBy 字段防止反弹,可避免错过更新问题。
- 若同时捕获父记录和子记录(标题和行项目)的变更,检查是否所有子记录的必要变更都会导致父记录修改时间戳的变更,若是,则可仅使用父记录的时间戳。
以下是模式 3 的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(源应用程序):::process -->|记录变更更新时间戳| B(源数据库):::process
C(查询源数据库):::process -->|使用绑定变量获取变更记录| D(集成处理):::process
D -->|处理变更| E(目标应用程序):::process
D -->|处理失败| F(重试机制):::process
F -->|重试处理| D(集成处理):::process
2.4 模式 4:快照比较
此模式使用源应用程序数据集的精确副本识别变更记录。通过比较时间点 A 的副本与时间点 B 的最新源数据,可识别两者之间的变更。该过程需逐行、逐字段比较所有源数据,以识别新增、修改和删除的记录。识别变更后,创建源数据的新副本,作为下次比较的基础。
2.4.1 优点
- 可与几乎任何数据源一起使用,特殊系统和应用程序要求最少,直接访问源数据或处理提取的源数据副本时效果相同。
- 可与任何支持有序查询的应用程序 API 或数据源一起使用,无需直接连接到 SQL 数据库,若数据源不支持有序查询,数据必须预先排序。
- 不易出现因过滤用户以避免反弹而导致的错过更新问题。
- 支持可靠的删除检测。
- 处理可定时或排序,以防止依赖记录的排序问题。
- 如果对不参与集成的源字段进行了更改,不进行处理,减少了无变更消息的处理,降低了更新冲突的可能性。
- 标题和行项目记录可分组为一条消息(和一次比较),以检测组内的任何变更,并生成单个标题和行项目消息或事务。
- 该机制可靠,确保不会错过任何变更。
2.4.2 缺点
- 创建过程复杂,涉及大量编码。
- 检测变更的效率低,可能需要数分钟处理才能找到少量变更。
- 由于处理所有源记录所需时间长,支持的频率低(通常仅为每天一次)。
- 不包含防止反弹的机制,目标系统发起的所有变更都会完整循环回目标系统,反弹消息在短时间内以特定顺序发生竞争变更时可能导致更新冲突问题。
2.4.3 实施提示
由于该模式实现复杂,需要有经验的开发人员进行编码和维护。在选择使用此模式时,要充分考虑其效率和频率的局限性,确保其适合业务需求。
以下是模式 4 的 mermaid 流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(源应用程序):::process -->|获取快照| B(当前快照):::process
C(主副本):::process -->|与快照比较| D(比较过程):::process
B -->|与主副本比较| D(比较过程):::process
D -->|识别变更| E(处理变更):::process
E -->|更新主副本| C(主副本):::process
E -->|处理变更到目标应用程序| F(目标应用程序):::process
3. 模式对比总结
| 模式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 应用程序发布者 | 实时、事件驱动,支持删除,可靠性高 | 需特定支持,可能不支持过滤用户防止反弹 | 源应用程序支持变更通知,对实时性要求高的场景 |
| 修改标志 | 支持删除,双向集成,多播支持,有重试机制 | 可能需数据库触发器,效率低,依赖数据库连接 | 对删除操作有要求,需要双向集成和防止反弹的场景 |
| 修改日期/时间戳 | 支持多播,设置简单,适用于按需应用 | 双向同步不可靠,时钟同步问题,不支持删除 | 单向同步,应用程序表有修改日期字段,适用于按需应用环境 |
| 快照比较 | 适用数据源广泛,可靠检测删除,减少无变更处理 | 实现复杂,效率低,频率低,无反弹机制 | 对数据变更检测准确性要求高,对处理频率要求不高的场景 |
在选择净变更模式时,需要综合考虑业务需求、应用程序架构、数据特点等因素,以确保选择最适合的模式来实现高效、可靠的数据集成。
4. 不同场景下的模式选择建议
4.1 实时性要求高的场景
当业务流程对数据实时性要求极高,例如金融交易系统、实时监控系统等,需要数据变更能在瞬间被捕获和处理,此时“应用程序发布者”模式是首选。
在金融交易系统中,股票价格的实时变动需要立即同步到各个相关系统中。应用程序发布者模式能够基于源应用程序内特定事件(如股票价格更新)主动发布变更,实现实时、事件驱动的通知,无需对应用程序或数据库服务器进行轮询,大大减少了延迟。而且该模式通常支持删除操作,能确保数据的一致性。但要注意,此模式需要源应用程序架构提供变更通知或回调功能,在选择前要确认应用程序是否具备该能力。
4.2 需要双向集成和防止反弹的场景
对于涉及多个系统之间双向数据同步,并且需要防止数据在系统间来回反弹的场景,“修改标志”模式是比较合适的选择。
以企业的供应链管理系统为例,采购部门的订单系统和库存管理系统需要进行双向数据同步。当订单系统中的订单信息发生变更时,需要同步到库存管理系统;反之,库存管理系统的库存信息变更也需要同步到订单系统。修改标志模式通过在源应用程序数据库中创建影子表和数据库触发器,能够跟踪数据的变更,并在变更处理后更新同步标志。同时,该模式支持双向集成,通过可靠的忽略用户机制可以有效防止数据反弹。不过,此模式可能需要数据库引擎支持触发器,并且需要详细了解物理数据库架构,在实施前要做好相应的技术准备。
4.3 单向同步且应用程序有日期字段的场景
如果数据集成是单向的,并且应用程序表中已经包含了修改日期/时间字段,那么“修改日期/时间戳”模式是一个简单有效的选择。
在一些数据分析系统中,需要从业务系统中定期同步数据进行分析。业务系统的数据库表中通常会有修改日期字段,使用修改日期/时间戳模式可以通过运行查询并使用上次查询执行时的源系统时间作为“绑定变量”,轻松获取自上次查询以来更新的记录。该模式支持向多个系统多播变更,并且可以与任何支持过滤查询的应用程序 API 或数据源一起使用,无需直接连接到 SQL 数据库,适用于按需应用程序环境。但要注意,此模式对于双向同步过程可能不完全可靠,并且通常不支持删除操作。
4.4 对数据准确性要求高但处理频率低的场景
当对数据变更检测的准确性要求极高,而对处理频率要求不高时,“快照比较”模式是最佳选择。
在一些历史数据归档系统中,需要定期对业务系统的数据进行备份和归档,确保数据的完整性和准确性。快照比较模式通过使用源应用程序数据集的精确副本,逐行、逐字段比较所有源数据,能够准确识别新增、修改和删除的记录。该模式支持可靠的删除检测,并且不易出现因过滤用户以避免反弹而导致的错过更新问题。但该模式实现复杂,效率低,处理频率通常仅为每天一次,在选择时要充分考虑业务对处理频率的要求。
5. 实施净变更模式的注意事项
5.1 数据一致性
在实施任何净变更模式时,都要确保数据在源系统和目标系统之间的一致性。例如,在使用“修改标志”模式时,要保证影子表和基表之间的数据同步准确无误。当基表记录被删除时,影子表记录的处理要符合业务逻辑,以避免数据不一致的问题。
5.2 性能优化
不同的净变更模式对系统性能的影响各不相同。在选择模式时,要考虑系统的性能承受能力。例如,“快照比较”模式虽然能准确检测数据变更,但效率低,可能会对系统性能造成较大影响。可以通过优化查询语句、合理设置处理频率等方式来提高性能。
5.3 错误处理和重试机制
数据集成过程中难免会出现错误,因此要建立完善的错误处理和重试机制。例如,在“修改日期/时间戳”模式中,需要构建额外功能来支持对目标应用程序重试被拒绝的记录。可以通过消息队列处理记录或维护拒绝行表或文件来实现重试机制,确保数据最终能被正确处理。
5.4 安全和权限管理
在数据集成过程中,要确保数据的安全性和访问权限的合理性。例如,在使用“应用程序发布者”模式时,要对发布者的权限进行严格管理,防止未经授权的变更发布。同时,要对数据传输过程进行加密,保护数据的隐私和完整性。
6. 未来净变更模式的发展趋势
6.1 智能化和自动化
随着人工智能和机器学习技术的发展,未来的净变更模式可能会更加智能化和自动化。例如,通过机器学习算法可以预测数据变更的趋势,提前做好数据同步的准备,减少延迟。同时,智能化的错误处理和重试机制可以自动分析错误原因,并采取相应的措施进行修复。
6.2 与云技术的深度融合
云技术的广泛应用为数据集成带来了新的机遇。未来的净变更模式可能会与云技术深度融合,利用云平台的强大计算能力和存储能力,实现更高效、更可靠的数据集成。例如,在云环境中可以使用分布式计算技术来加速快照比较的过程,提高处理效率。
6.3 支持更多的数据类型和数据源
随着业务的发展,数据的类型和数据源越来越多样化。未来的净变更模式需要支持更多的数据类型,如非结构化数据、半结构化数据等,并且能够与更多的数据源进行集成,如物联网设备、社交媒体平台等。
7. 总结
净变更模式在数据集成过程中起着至关重要的作用。不同的净变更模式具有各自的优缺点和适用场景,在选择时要综合考虑业务需求、应用程序架构、数据特点等因素。同时,在实施净变更模式时,要注意数据一致性、性能优化、错误处理和重试机制以及安全和权限管理等问题。随着技术的不断发展,净变更模式也将不断演进,未来将朝着智能化、自动化、与云技术深度融合以及支持更多数据类型和数据源的方向发展。通过合理选择和应用净变更模式,可以实现高效、可靠的数据集成,为企业的业务发展提供有力支持。
以下是一个总结不同净变更模式关键信息的表格:
| 模式 | 核心原理 | 优点 | 缺点 | 适用场景 | 实施关键 |
| — | — | — | — | — | — |
| 应用程序发布者 | 利用源应用程序功能,根据特定事件主动发布变更 | 实时、支持删除、可靠性高 | 需特定支持、可能不支持过滤用户 | 实时性要求高,源应用支持变更通知 | 确认应用程序能力,处理乱序消息 |
| 修改标志 | 通过切换同步标志跟踪变更,依赖触发器和影子表 | 支持删除、双向集成、多播、有重试机制 | 可能需数据库触发器、效率低、依赖数据库连接 | 需要双向集成和防止反弹 | 设计忽略用户逻辑,构建重试超时 |
| 修改日期/时间戳 | 使用修改日期/时间戳字段识别变更记录 | 支持多播、设置简单、适用于按需应用 | 双向同步不可靠、时钟同步问题、不支持删除 | 单向同步,应用有日期字段 | 确保日期时间完整性,构建重试机制 |
| 快照比较 | 比较源数据副本识别变更 | 适用数据源广泛、可靠检测删除、减少无变更处理 | 实现复杂、效率低、频率低、无反弹机制 | 对数据准确性要求高,处理频率低 | 有经验开发人员维护,考虑效率和频率 |
通过对这些模式的深入了解和合理应用,企业能够更好地应对数据集成中的挑战,实现数据的高效流通和利用。
超级会员免费看
3538

被折叠的 条评论
为什么被折叠?



