#pipeline #etl #pipe

modupipe

一个模块化和可扩展的类似 ETL 的管道构建器

1 个不稳定版本

0.1.0 2022 年 12 月 1 日
0.0.1 2022 年 12 月 1 日

#1061 in 数据结构

MIT 许可证

10KB
249

Build

🪠 ModuPipe

一个模块化和可扩展的类似 ETL 的管道构建器

Python 版本在这里: https://github.com/vigenere23/modupipe

用法

提取-转换-加载 (ETL) 管道是工业界常用的经典数据处理管道形式。它由 3 个主要元素组成

  1. 一个 Extractor,它使用拉取策略以类似迭代器的结构返回数据(使用 .get_next())。
  2. 一些 Mapper(可选),它将来自源的数据(解析、转换、过滤等)进行转换。可以将映射器连接起来,并将它们与提取器连接(使用 .map())以形成新的提取器。
  3. 一个 Loader,它使用推策略消费可能已转换的数据。可以有多个加载器(使用 LoaderList)。

因此,这 3 个过程都作为特质提供,易于在任何时候进行链式和可互换操作。

还提供了一个 Runner 特质,以便接口“运行动作”的概念。这允许强大的封装执行行为的组合模式。

示例

用法示例位于 示例 文件夹中。

讨论

优化推送到多个加载器

如果您有多个加载器(使用 LoaderList),但性能是必需的,那么您应该使用多线程方法(使用 runnner::ConcurrentRunner),并将数据推送到每个加载器的一个通道(队列)。然后,每个队列将为每个原始加载器提取数据,所有操作并行运行。这特别适用于至少有一个加载器处理时间较慢的情况。

例如,让我们考虑一个处理速度非常慢的 Loader 1 和一个通常处理速度很快的 Loader 2

┌────── single pipeline ──────┐        ┌──────────────── single pipeline ───────────────┐
 Extractor ┬─⏵ Loader 1 (slow)    OR    Extractor ──⏵ Loader 1 (slow) ──⏵ Loader 2 (late)
           └─⏵ Loader 2 (late)

┌─────── pipeline 1 ──────┐               ┌────────── pipeline 2 ─────────┐
 Extractor ┬─⏵ PushToQueue ──⏵ Queue 1 ⏴── GetFromQueue ──⏵ Loader 1 (slow)
           └─⏵ PushToQueue ──⏵ Queue 2 ⏴── GetFromQueue ──⏵ Loader 2 (not late)
                                          └──────────── pipeline 3 ───────────┘

这将当然不会加速 Loader 1 的处理时间,但所有其他加载器的性能将因不必等待彼此而大大提高。

无运行时依赖