关于ETL引擎设计的一点感想

    做ETL已经不是第一次了,无论是EAI,EII,还是分布式计算,ETL好像都是其中不可或缺的一环。而ETL不但要处理不同数据库之间的差异,同时还要处理数据语义上的差异,一些时候还可能要牵扯一些业务逻辑。因此,每次做ETL几乎都需要重新来过。且ETL开发相对复杂。商业上也没有相对成熟的产品和中间件。往往成为项目的重点和难点。

   由于ETL并不是我的工作范围,只是近期才开始接收ETL的维护工作。对项目中老的ETL复杂的逻辑搞的头晕脑胀,总觉的什么地方不对,却一直无法指出老的架构到底错在那里。昨天晚上睡觉前,突然有所领悟。

   首先,ETL的工作宏观上来说,就2个步骤,数据抽取,数据写入。当然,其中可能还要牵扯到数据的清洗,转换等功能。但首先,最基本的功能是抽取,写入。以此为核心,使用微核模式。创建一个最小可用的ETL Server。

   其次,数据的清洗和转换工作,作为可选的步骤,以IOC模式进行配制化管理,如何处理,交由用户决定。

  接着,ETL Server,本质上讲ETL Server只是一个任务执行任务的平台,因此。尽量保持ETL Server的简化至关重要。只保留相应的启动,停止,增加任务,删除任务,查询状态等功能。

   第四,需要保留单独的调度模块。把任务调度和ETL Server进行解耦,分别保持独立。如何调度任务,交由定时模块来确定。ETL Server只是被动执行。(可使用Bridge模式,不过,不推荐,一个定义良好的接口足以)

   第五,线程的问题,由于在ETL中,处于性能的考虑,多线程几乎必不可免,应该由谁来进行线程的调度这是一个问题。当前,普遍的做法是由ETL Server来处理和分配线程。
            而我认为,ETL Server很难智能的判断那些需要使用线程,那些不使用线程更好。因此,是否使用线程交由用户决定,系统只提供相应的线程服务。把线程作为底层服务提供给用户,既可以保证线程调度的准确,同时兼顾了灵活性。
     当然,为了方便用户的使用,应当提供一些典型的模版类。

   第六,注意表示逻辑与ETL逻辑的分离,如果需要展现ETL工作状态,并提供状态查询功能。必须注意保证表现逻辑与ETL 的业务逻辑分离。这里可以使用Adapter模式来处理两者之间的差异。

     总的来说,开发一个好的ETL应该做到,表现逻辑与ETL逻辑分离,调度逻辑与ETL逻辑分离,单个任务处理逻辑与ETL逻辑分离,最终保持微核模式。

  好处:(1)逻辑清晰
           (2)每部分功能简单,易于维护
            (3)模块之间实现松耦合
            (4)易于做单元测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值