1 个不稳定版本
0.1.0 | 2022 年 12 月 1 日 |
---|---|
0.0.1 |
|
#1061 in 数据结构
10KB
249 行
🪠 ModuPipe
一个模块化和可扩展的类似 ETL 的管道构建器
Python 版本在这里: https://github.com/vigenere23/modupipe
用法
提取-转换-加载 (ETL) 管道是工业界常用的经典数据处理管道形式。它由 3 个主要元素组成
- 一个
Extractor
,它使用拉取策略以类似迭代器的结构返回数据(使用.get_next()
)。 - 一些
Mapper
(可选),它将来自源的数据(解析、转换、过滤等)进行转换。可以将映射器连接起来,并将它们与提取器连接(使用.map()
)以形成新的提取器。 - 一个
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
的处理时间,但所有其他加载器的性能将因不必等待彼此而大大提高。