5.3 定义需求

数据迁移服务有4个主要模块:

接入模块

负责将数据一次性或持续地从源数据存储复制到目标数据存储。

转换模块

负责将数据从源数据复制到目标数据时进行转换。

合规模块

确保用于分析的迁移数据遵循监管规定。

验证模块

确保源数据和目标数据之间的数据一致性。

每个组件的需求因部署的不同而不同,这取决于几个因素,包括行业法规、平台技术的成熟度、洞察用例的类型、现有数据流程、数据用户的技能等。本节讨论数据用户在定义与数据迁移服务相关的需求时需要考虑的方面。

5.3.1 接入需求

数据接入需求主要考虑三个关键方面。

源数据存储技术和目标数据存储技术

从数据存储中读取和写入数据需要一个特定技术的适配器。可用的解决方案根据其支持的适配器而有所不同。因此,列出当前部署的数据存储非常重要。表5-1列出了一些常用的数据存储类别。

表5-1:数据存储类别

071-01

数据规模

数据工程师需要了解的与数据规模相关的关键信息包括:

1. 表的行数有多少?

2. 表的物理内存大小是多少TB?

3. 当前要复制的表的数量大致是多少?

数据规模的另一个方面是变化率:根据新增、更新和删除的数量来估计表是否在快速变化。利用数据的大小和更新率,数据工程师可以估计规模需求。

可接受的刷新延迟

对于探索性用例,数据迁移通常是一次性操作。对于数据的持续拷贝,有一些不同的选择,如图5-1所示。在图中,预定的数据拷贝可以实现为批处理(周期性)操作,而不是连续操作。批处理操作既可以是表的完整副本,也可以是只拷贝上次变化的增量。对于连续拷贝,源数据上的更改将以近实时的方式(以秒或分钟为单位)传输到目标上。

072-01

图5-1:决策树显示不同类型的数据迁移请求

5.3.2 转换需求

在数据迁移过程中,目标数据可能不是源数据的完整副本。作为数据迁移服务的一部分,定义服务需要支持的不同类型的转换很重要。有4类转换:

格式转换

目标数据最常见的形式是源表的副本。目标数据也可以是源数据追加更新的日志,或者是代表表的更新、插入或删除的更改事件列表。

自动模式演进

对于预定的数据迁移,源表的模式可以得到更新。数据迁移服务应该能够自动适应变化。

过滤

原始源表或事件可能有需要从目标中过滤的字段。例如,目标表可能只需要源表中列的子集。此外,过滤还可以用于删除重复的记录。根据分析的类型,对删除记录的过滤可能需要特殊处理。例如,财务分析要求被删除的记录可以用删除标志(称为软删除)而不是用实际删除(硬删除)来标记。

聚合

在源数据跨多个孤岛的场景中,转换逻辑会聚合并创建一个单一的具体化视图。聚合还可以通过连接不同的数据源来丰富数据。

5.3.3 合规需求

在数据迁移过程中,应该考虑多方面的合规性。图5-2显示了需要考虑的马斯洛需求层次结构。在三角形的底部是合规性的三个A:身份验证、访问控制和审计跟踪。上面是处理PII的加密和屏蔽方面的考虑。再往上是任何特定于监管合规的需求,如SOX、PCI等。最上面是数据权限合规,即遵守CCPA、GDPR等法律。

073-01

图5-2:在数据迁移期间要考虑的合规需求的层次结构

5.3.4 验证需求

确保源数据和目标数据一致是数据迁移过程的关键。根据分析类型和所涉及的数据性质,可以定义不同的一致性检查需求。例如,通过检查行数是否一致可以确保所有源数据都反映在目标数据上。还有抽样一致性检查,比较行的子集以验证源数据和目标数据上的记录是否完全匹配,并且在数据迁移期间没有出现数据损坏(比如数据列显示为null)。其他质量检查(比如列值分布和跨表引用完整性)详见第9章。如果检测到错误,应该将数据迁移服务配置为发出告警或使目标数据不可用。

5.3.5 非功能性需求

以下是在设计数据迁移服务时应该考虑的一些关键非功能性需求:

方便接入新的源数据存储

简化数据源所有者对服务的使用体验,并支持主流的源数据存储和目标数据存储。

自动监控和故障恢复

服务应该能够创建检查点并从任何数据迁移失败中恢复。在迁移大型表时,这一点尤其重要。解决方案中还应该包含一个全面的监控和告警框架。

尽量减少对数据源性能的影响

数据迁移不应该降低数据源的性能,因为这会直接影响应用程序的用户体验。

解决方案的扩展

考虑到数据的持续增长,该服务应该支持每天数千次的计划性数据迁移。

社区广泛使用的开源技术

在选择开源解决方案时,请注意有一些是僵尸项目。确保开源项目是成熟的,并被社区广泛使用。