65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (7投票s)

2011年8月31日

CPOL

5分钟阅读

viewsIcon

50250

downloadIcon

255

在本教程中,我们将学习 SSIS 均衡数据分发器 (BDD)。

目录

  1. 引言
  2. 工作原理
  3. 将均衡数据分发器 (BDD) 添加到 SSIS 工具箱
  4. 让我们来看一个例子
  5. 何时使用 BDD
  6. 参考文献
  7. 结论

引言

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:右键单击数据流转换,然后选择“选择项”。

1.jpg

步骤 2:在出现的“选择项”对话框中,选择“SSIS 数据流项”选项卡,然后从中选择“均衡数据分发器”,最后单击“确定”。

2.jpg

我们会发现 BDD 已添加到我们的数据流转换部分。

3.jpg

让我们看一个例子

BDD 接受单个输入,并尝试以几乎相等的比例将其数据分发到其各个输出,例如,如果我们有 5 个输出,则每个输出组件将接收总输入数据的近 1/5。BDD 的效率在于它操作的是数据缓冲区而不是单个行。

我们有一个文本文件,例如 *input.txt*,其中包含 100 万行。这是一个简单的文本文件,其中包含一些员工信息,如 EmpIDEmpNameEmpSexEmpPhoneNumber

步骤 1:打开 Bids,并将一个数据流任务拖放到控制流设计器中。

步骤 2:在数据流设计器中,首先添加一个平面文件源,并将 *input.txt* 文件指定为其源。如果我们进行预览,输出(部分)将如下所示。

4.jpg

步骤 3:接下来,添加一个 BDD,其源显然是平面文件源。

注意:除了名称、内部元数据验证和描述之外,BDD 不提供任何其他自定义设置。

BDD 的属性窗口显示如下。

5.jpg

步骤 4:添加 5 个平面文件目标,每个目标组件的源都将是我们的 BDD。将每个平面文件目标组件的目标文件分别指定为 *Output1.txt*、*Output2.txt*、*Output3.txt*、*Output4.txt*、*Output5.txt*。我们的设计应如下所示。

6.jpg

步骤 5:现在让我们运行包,输出如下。

7.jpg

可以看出,在 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 万行,并观察其行为。运行包后,我们会发现所有行都已传输到第一个输出组件,而其他组件则未接收任何内容。

8.jpg

现在,让我们将输入文件中的行数从 9,947 增加到 9,948(九千九百四十八行)。运行包后,我们发现第一个输出组件接收了 9,947 行,而第二个输出组件接收了 1 行。

9.jpg

因此,我们可以推断该组件具有一些预定义的逻辑来分发行到其输出组件,这些逻辑已被抽象化。

何时使用 BDD

  1. 当有大量数据涌入,并且有必要更快地读取它们时。
  2. 如果数据没有排序依赖性,因为 BDD 基于并行性原理工作,而不是顺序工作。

参考文献

结论

在本文中,我们了解了 BDD 的优点,也了解了它的工作原理。我们观察到,通过利用并行性,BDD 提高了数据转换的速度。因此,最好在多处理器配置上使用它,而不是在单处理器配置上。

感谢阅读本文。

历史

  • 2011 年 8 月 31 日:初始帖子
© . All rights reserved.