ETL反模式:装载过程’t Scale

ETL 流程开发中最重要的设计考虑因素之一是要处理的数据量。大多数ETL流程都有时间限制,要求它们在给定的窗口内完成加载操作,并且处理数据所需的时间通常会决定负载的设计。

我最常犯的错误之一’我们已经看到,ETL设计以及扩展的性能预期是基于当前数据量的。如今,这种方法行之有效,但随着时间的推移,数据量通常会增加–有时会成倍增加!轻松处理一百万条记录的加载过程将以10倍或100倍的数据量执行非常不同的操作。

ETL 反模式:不包含的加载过程’t scale

除极少数情况外,数据量将随着时间增加。即使使用 增量载荷模式,最常见的趋势是净数据(新+更改)随时间增加。即使线性变化平稳,’可能会耗尽ETL设计或系统资源。大量数据爆炸–通常发生在公司收购,数据转换或公司快速发展中–ETL的需求会很快超出容量。

重构ETL以实现显着的数据增长’总是像在问题上投入更多的资源一样简单。构建适当扩展的ETL不仅需要庞大的硬件或服务层;它需要良好的基础数据移动和转换模式,以允许大量数据。

为增长而建设

设计和构建可扩展的ETL流程更便宜,并且更容易预先进行。实际上,重构加载过程实际上是一个全新项目,需要进行新一轮的测试,数据验证和部署。您可以通过投入更多的资源(用于本地解决方案的硬件,或用于托管或云解决方案的服务层)来克服一些设计限制,但是最终您将花费更多的精力来克服效率低下的ETL设计。第一次正确构建它的成本。

在构建可扩展的ETL流程时,请牢记以下设计模式:

  • 唐’只是为今天而建 ’的需求。考虑一下数据的技术和业务需求,然后问自己’是可能发生的数据增长的最极端情况。设计您的ETL,使其符合要求 volume of data.
  • 考虑非传统的ETL / ELT模式。传统的extract-transform-load模型在大多数情况下都可以很好地工作,但是根据数据量和转换需求,您可能需要转移到Extract-load-transform(ELT)模式下,以将一些处理工作卸载到目标数据库中。 。在某些情况下,可能需要一个迭代过程(ETLT,ELTLT,ELTTT和各种其他字母汤)。
  • It’不仅仅是数据量。还应考虑ETL的T(转换)部分。如果您的数据量适度增长,但是您希望随着时间的流逝,数据的转换将需要增加(例如,添加新的业务规则或数据清理),那么您应该以这样的方式设计流程,以赢得更多的转换’削弱了这一过程。
  • 尽可能保持基于设置。即使在ETL流程之外,这也是一个很好的经验法则。如果你’重新处理关系数据,让数据库引擎做得很好,这意味着只要有可能就坚持基于集合的处理。
  • 限制您的数据量’re touching. 我写了这个 在本系列的早期技巧中。如果您可以减少ETL流程中需要吸收的数据量,则可以’几乎可以肯定会看到更好的性能。
  • 用大量数据测试您的流程。虽然它’使用尽可能接近您的生产数据的测试数据集是一个好主意,’偶尔使用较大的数据集测试那些加载过程是一个好主意,以了解可扩展性。如果您当前正在处理 n 行,但预计为10n or 20n 在短期内,以该体积开始测试(如果可能,甚至更大)。
  • 唐’只是假设您可以在将来出现任何数据规模问题时抛出硬件(或更高的服务层)。是的,在某个时候,ETL流程将需要更多的功能,但是不要’请将其视为满足您所有ETL性能需求的灵丹妙药。从一个好的设计开始通常会延迟增加资源的需求。

关于作者

Tim Mitchell
Tim Mitchell is a 数据架构师和顾问 专门研究摆脱数据痛点的人。 在数据仓库,ETL,报告或以下方面需要帮助 训练 ?如果是这样, 联系蒂姆 进行30分钟的无义务聊天。

成为第一个发表评论的人 on " ETL 反模式:装载过程’t Scale"

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.