ETL优化之道

天下武功,唯快不破。

ETL Job优化的目标是执行快,耗费时间更短,总结起来有以下方式:

  1. 增加硬件资源,比如增大内存、CPU等,但优化往往是在资源不足的情况下

  2. 数据缓存,空间换时间

  3. 服务常驻,减少初始化化时间

  4. 减少输入数据量,常用以下技术

    • 数据压缩,缓存中能存放更多数据
    • 索引+BloomFilter,也是空间换时间,加快数据查找速度
    • 列裁剪,原理也是提高了缓存利用率
    • 谓词下推,减少扫描数据,一般要借助预分区或索引相关技术
    • 数据分区分桶
    • 避免重启读取相同数据,比如对同一张表多次查询UNION改写成一次查询+case when
    • 预聚合
  5. 列式存储,在分析场景下顺序读取更多数据,局部性原理,缓存利用率更高;同时数据类型相同压缩效率高,缓存中能存更多数据;其次,也方便建立索引,对数据进行预统计,比如MAX/MIN/是否有NULL等

  6. 向量化执行,利用多核批量处理数据,通常属于框架层面实现

  7. 代码生成,减少虚函数调用,也通常数据框架实现层面

  8. 编码技术,比如有些场景下string编码成int可获取更高执行效率

  9. 物化视图,也即预计算,空间换时间

  10. 自适应算法,一般需要利用一些统计信息进行CBO, 根据不同场景选择合适执行算法,比如Join时根据表大小选择更高效算法

  11. 近似计算, 在特殊场景下平衡计算成本和准确性

以上优化方式基本也是OLAP系统经常采用的技术,因为OLAP系统主要目标就是快。

你可能感兴趣的:(BigData,Java,Database,etl,缓存,数据仓库)