在这种情况下的SSIS性能

时间:2016-11-09 10:29:06

标签: sql sql-server tsql ssis

这种逻辑能否在SSIS中实现,是否可以近乎实时地实现?

当起始表有大约500.000行时(在STEP1和STEP2之后我们有数百万条记录),用户正在提交包含数十万条记录的表并使用当前实现等待最多1小时的结果。将来,数据量和用户群可能会急剧增长。

第1步

我们有一个约500.000行的表(A),其中包含以下主要列:ID, AMOUNT 我们还有一个表(B),其中包含prop.steps和以下主要列:ID_A, ID_B, COEF

表A:

id  amount
a   1000
b   2000

表B:

id_a,id_b,coef
a,a1,2
a1,b2,2
b,b1,5

我们正在使用表格A中的所有500.000条记录创建新记录,将AMOUNT乘以COEF

输出表:

id, amount
a,1000
a1,2000
a2,4000
b,2000
b1,10000

第2步

遵循自定义逻辑,我们使用以下逻辑将之前计算的所有记录的数量分配给其他项目:

表A

ID,AMOUNT
a,1000
a1,2000
a2,4000
b,2000
b1,10000

表B

ID,WC,COEF
a,wc1,0.1
a,wc2,1
a,wc3,0.1
a1,wc4,1
a2,wc5,1
b,wc1,1
b1,wc1,1
b1,wc2,1

输出表:

ID,WC,AMOUNT
a,wc1,100
a,wc2,1000
a,wc3,100
a1,wc4,2000
a2,wc5,4000
b,wc1,2000
b1,wc1,10000
b1,wc2,10000

其他步骤只是对表的连接和算术运算,并且记录的总数不能减少(表中还有其他带元数据的字段)。

1 个答案:

答案 0 :(得分:2)

根据我的个人经验,这种逻辑可以在SSIS中完全实现。

我会在脚本任务或组件中执行此操作有两个原因:

  • 首先,如果我理解正确,你需要一个异步任务 输出的数据多于输入数据。脚本可以处理多个不同的输出。
  • 其次,在脚本中,您可以实现所有这些计算 在使用其他组件的情况下会占用很多它们 他们之间的关系。而最重要的方面是 算法复杂度与您的算法保持一致 如果设计可以大大提高性能和可扩展性 你有一个很好的复杂性,两个方面,如果我再次正确, 是根本的。

但是,有些专业人士对“复杂”剧本有不好的看法......

这种方法的下行步骤是你需要一些.NET和编程能力,你的大多数封装逻辑都会集中在那里,脚本调试可能比其他组件更复杂。但是一旦你开始使用SSIS的.NET功能,就没有回头路了。

通常在SSIS中接近实时对于大数据集来说是棘手的,有时您需要集成其他工具(例如StreamInsight)来实现它。