SSIS 均衡数据分发器转换组件入门






4.60/5 (7投票s)
在本教程中,我们将学习 SSIS 均衡数据分发器 (BDD)。
目录
引言
Microsoft 于 2011 年 6 月 7 日发布了一个新的 SSIS 2008 转换组件,名为 SSIS 均衡数据分发器 (BDD)。该组件接受单个输入,并通过多线程几乎均匀地将数据流分发到多个目标。可以 在此处下载。
工作原理
文档说明
BDD 接受单个输入,并通过多线程将数据流均匀地分发到多个目标。该转换一次处理一个管道缓冲区大小的行,并以轮询方式将其移动到下一个输出。它是均衡且同步的,因此如果下游的某个转换或目标比其他目标慢,其余的管道都会停滞,所以如果所有输出都有相同的转换和目标,该转换效果最好。BDD 的目的是通过多线程提高性能。BDD 适用的场景有几个特点:1) 目标是统一的,或者至少是同一种类型。2) 输入比输出快,例如,从平面文件读取到 OleDB。
注意:BDD 仅适用于 SSIS 2008 和 SSIS 2008 R2 版本。
将均衡数据分发器 (BDD) 添加到 SSIS 工具箱
安装完 *BalancedDataDistributor-x86.exe* 文件后,我们需要将其添加到数据流转换的工具箱中,如下所示。
步骤 1:右键单击数据流转换,然后选择“选择项”。
步骤 2:在出现的“选择项”对话框中,选择“SSIS 数据流项”选项卡,然后从中选择“均衡数据分发器”,最后单击“确定”。
我们会发现 BDD 已添加到我们的数据流转换部分。
让我们看一个例子
BDD 接受单个输入,并尝试以几乎相等的比例将其数据分发到其各个输出,例如,如果我们有 5 个输出,则每个输出组件将接收总输入数据的近 1/5。BDD 的效率在于它操作的是数据缓冲区而不是单个行。
我们有一个文本文件,例如 *input.txt*,其中包含 100 万行。这是一个简单的文本文件,其中包含一些员工信息,如 EmpID
、EmpName
、EmpSex
和 EmpPhoneNumber
。
步骤 1:打开 Bids,并将一个数据流任务拖放到控制流设计器中。
步骤 2:在数据流设计器中,首先添加一个平面文件源,并将 *input.txt* 文件指定为其源。如果我们进行预览,输出(部分)将如下所示。
步骤 3:接下来,添加一个 BDD,其源显然是平面文件源。
注意:除了名称、内部元数据验证和描述之外,BDD 不提供任何其他自定义设置。
BDD 的属性窗口显示如下。
步骤 4:添加 5 个平面文件目标,每个目标组件的源都将是我们的 BDD。将每个平面文件目标组件的目标文件分别指定为 *Output1.txt*、*Output2.txt*、*Output3.txt*、*Output4.txt*、*Output5.txt*。我们的设计应如下所示。
步骤 5:现在让我们运行包,输出如下。
可以看出,在 100 万条数据中,BDD 将 204,240 行数据分发到第一个输出组件,而其他组件接收 198,940 行。如果我们用 5 来除以 100 万,那么每个输出组件应该平均接收 200,000 行数据。但是,由于分发是通过多线程进行的,因此无法精确控制数据的划分。
现在,如果我们打开输出文件,我们可以找出 BDD 分发数据的方式,例如:
文件名 | 第一条记录 | 最后一条记录 | 记录总数 |
Output1.txt | 1,Name1,Female,12345679 | 1000000,Name1000000,Male,13345678 | 2,04,240 |
Output2.txt | 9948,Name9948,Male,12355626 | 964859,Name964859,Female,13310537 | 1,98,940 |
Output3.txt | 19895,Name19895,Female,12365573 | 974806,Name974806,Male,13320484 | 1,98,940 |
Output4.txt | 29842,Name29842,Male,12375520 | 984753,Name984753,Female,13330431 | 1,98,940 |
Output5.txt | 39789,Name39789,Female,12385467 | 994700,Name994700,Male,13340378 | 1,98,940 |
BDD 基于并行性原理工作。它通过将工作分配给多个线程,提供了一种创建独立段的简便方法。
注意:如前所述,该组件使用一个内部缓冲区(根据我的实验,发现是 9,947 行),并且是预设的。无法覆盖此设置。作为证明,我们将在输入文件中仅使用 9,947 行(九千九百四十七行)而不是 100 万行,并观察其行为。运行包后,我们会发现所有行都已传输到第一个输出组件,而其他组件则未接收任何内容。
现在,让我们将输入文件中的行数从 9,947 增加到 9,948(九千九百四十八行)。运行包后,我们发现第一个输出组件接收了 9,947 行,而第二个输出组件接收了 1 行。
因此,我们可以推断该组件具有一些预定义的逻辑来分发行到其输出组件,这些逻辑已被抽象化。
何时使用 BDD
- 当有大量数据涌入,并且有必要更快地读取它们时。
- 如果数据没有排序依赖性,因为 BDD 基于并行性原理工作,而不是顺序工作。
参考文献
结论
在本文中,我们了解了 BDD 的优点,也了解了它的工作原理。我们观察到,通过利用并行性,BDD 提高了数据转换的速度。因此,最好在多处理器配置上使用它,而不是在单处理器配置上。
感谢阅读本文。
历史
- 2011 年 8 月 31 日:初始帖子