目录:
1、ETL性能瓶颈在哪儿里
2、产生性能瓶颈的原因
3、如何解决掉这些性能问题
内容:
1、ETL性能瓶颈在哪儿里
ETL(Extract、Transform、load),即(抽取、转换、加载)。那么通常在哪一个环节会出现性能瓶颈呢?举个小例子,过年回家给小外甥买了一兜核桃-E,我需要用核桃钳将核桃夹碎-T,然后才能给小外甥吃-L。这样我们就可以明显的看出,那个部分比较耗时间,也就是夹碎核桃(T)、吃(L)两部分是比较耗时的。
2、产生性能瓶颈的原因
T和L耗时的原因各不相同。
T主要受两方面因素制约。一方面是受中间转换处理的复杂度的影响,另一方面是由于每一条数据都要它仔细判别。接着上面的例子,有些核桃特别坚硬,里面的隔层也特别坚硬,那就需要我做更多的工作来将核仁取出,即使有些核仁直接暴露在外面,我也需要辨别一下,是否干净、是否坏掉,坏掉的该如何处理等等。通过这样对比,我想这部分耗时也是情理之中了。
L主要与加载的目标硬、软设施有关,同等条件下,传递的速度是要比消耗的速度要快的,就好比说话比写字快(正常人),当然我也有事实证明,从同一oracle数据库中读取数据要比写数据快10倍以上。无论是加载到数据库或文件或LDAP,只要目标能够充分而快速的消耗掉传递过来的数据就可以证明性能不在它这,但事实往往不是这样。就像我的小外甥吃不完我夹碎的核桃。
3、如何解决掉这些性能问题
针对T的处理,主要是在转换(相当于换手)的时候尽量减小开销,尽可能的让一条数据从抽取出来到加载完成保持结构不变;还有一种期望就是,数据库变成面向对象的,我们不需要在在关系与对象之间做转换。就好比说,我取出的核仁直接放到小外甥的口中,而不是放到新的口袋里,然后他再慢慢悠悠的拿着吃。
针对L的处理呢,主要在增加消费线程,提高消费目标的吞吐量。好比我小外甥的朋友来了,和他一起吃这些核仁,而他因为怕人家吃光他的东西,大口吃起来,结果很快夹核桃的速度与吃核仁速度的基本达到平衡了,这样就不会导致越来越多的剩余,当然我们想要的性能就上来了。