关于 SSIS 并行foreach loop的一个设计思路
SSIS 包在控制流方面的性能优化,主要是提高并行度。
可以设置并发线程数MaxConcurrentExecuteables.
SSIS中的foreach loop container 不是并行执行任务的,
如果我们想使用并行执行的,可以借助第三方扩展的工具:parallel foreach loop.
参照:http://www.cozyroc.com/ssis/parallel-loop-task.
当然,你也可以使用script task,在里面并发完成所有的内容。
不过为了充分使用已有的SSIS 组件,我想了一个可以根据已有组件的,写相对少的代码,
使foreach loop类似于并发地完成工作。
基本思路就是把我们要处理的对象分组,然后使用多个foreach loop 的多个实例。
就像某个程序是串行的,但我们可以把它处理的任务分开,多运行几个实例而已。
譬如有一个folder里面,有巨多的文件,使用相同的文件结构我们可以使用foreach loop进行循环处理,、
使用同一个Data flow. 如果文件量多,数量大,则我们可以想以下办法。
根据一般情况,设置N个变量,object类型,用来承接文件名列表。
相对应的N个INT型变量,表示上面变量中文件的个数。
在foreach loop container 前面放置一个script task,把上面的变量作可写变量传入。
通过script task 先搜集下面的文件列表,然后等值分组,分组到N个数组里面,
同时N个变量标识数据的count,然后以count为约束条件下接N个foreach loop container.
这样就在某种程度上实现了并行执行的foreach loop.
还有一种情况就是可能source 文件 比较大,我们可以先把大文件分割成小文件,然后使用这个思路完成。