通过缓慢或昂贵的 WAN 链接进行提取
我认为你的描述听起来很合适。对于缓慢或昂贵的 WAN 链接,您可能希望减少数据传输量。一些方法是:
如果您可以从源头轻松识别新事务或更改的数据,则可以通过仅发送更改来减少数据量。如果您在源头有资源但无法轻松识别更改的数据,您可以执行以下操作(如果需要,请为此构建通用框架):
- 从源中提取
- 使用生日附加概率低的算法(例如 MD5、SHA-1)计算哈希值
- 使用表单中的哈希值(源系统键、所有非键属性的哈希值)维护数据库或文件
- 将具有不匹配哈希值的任何内容捆绑在一起,然后通过 WAN 链接发送。
- 更新哈希数据库。
稳健的分布式提取
像这样的分布式系统有许多故障模式,因此您需要为此实施一个相当健壮的错误处理机制。故障模式的示例可能是:
- 其中一个源系统或网络连接出现故障,可能是按计划发生的。
- 其中一个数据包迟到
- 数据以某种方式损坏。
- 瞬态负载或其他问题会导致超时,因此必须对传输进行分块。
根据仓库系统的要求,您可能需要容忍单个 Feed 的失败。您需要为此设计一个强大的错误处理策略。
Merge-on-Extract vs. Merge-on-Transform
如果系统相同(例如连锁零售店中的 POS 系统),您可能会通过在转换阶段之前合并数据来获得更简单的架构。这意味着暂存区需要了解数据源,至少出于审计目的。
如果您有少量系统或多个异构源,则应在转换过程中进行数据合并。在这种情况下,您的 ETL 可能会为每个源系统至少为某些过程提供单独的例程。
我们需要 ODS 吗?
数据仓库领域的一场重大宗教战争是是否应该拥有 ODS。我已经完成了有和没有 ODS 结构的系统,在个别情况下,设计决策是有原因的。我对此的看法是,这个决定的任何一方都没有普遍令人信服的论据,这首先是宗教战争存在的通常原因。
对于 50,000 英尺的视图,我对此的看法是,源系统越多,数据越同质,ODS 的情况就越强。可以为此绘制一个 gartner 式象限:
High+--------------------------+--------------------------+
| | |
| Kimball Model (low/high) | Enterprise Data Warehouse|
H | Unified ODS model hard | (high/high) |
e | to meaningfully design. | ODS both difficult and |
t | Flat star schemas easier | probably necessary to |
e | to fit disparate | make a manageable system |
r | data into. | Better to separate trans-|
g | | formation ahd history. |
e +--------------------------+--------------------------+
n | | |
e | | Consolidated Reporting |
a | Data Mart (low/low) | (high/low) |
i | | ODS easy to implement |
t | ODS probably of | and will simplify the |
y | little benefit | overall system |
| | architecture |
| | |
Low +--------------------------+--------------------------+
Low Number of data sources High