2011-08-03 35 views
2

我正在处理一个项目来处理三个文件......两个CSV和一个XML。这些文件正在使用BizTalk从文件共享移到SQL Server数据库表中。 xml文件正在使用SSIS中的C#组件转换为与两个平面文件相同的平面文件格式。然后,这些平面文件由SSIS包处理。 SSIS转换中有很多业务逻辑。 SSIS包也使用链接服务器进行了多次查找。所有查找和转换都是逐行进行的(这很慢)。此外,根据导致错误的业务对象(即BusObj1_error,BusObj2_error,BusObj3_error),将发生的任何错误放入单独的数据库表中。 基本上,我希望有人能够提出一个更好的体系结构来提高性能,允许可伸缩性和灵活性,并允许许多开发人员在同一部分功能上作为一个团队工作。 例如 - 将验证规则放入db中,而不是硬编码到SSIS中。
- 不是使用不同的错误表,而是将具有errorTypeId FK的单个错误表用于ErrorType表。 - 从SSIS C#迁移所有转换,以便多个开发人员可以同时处理不同的业务逻辑类。如何构建使用SSIS,XML和BizTalk技术的项目?

谢谢

回答

3

我对BizTalk一无所知。所以,我不知道它能做什么或不能做什么。关于SSIS,我的建议如下:

  1. 如果您在脚本任务/脚本组件中嵌入了大量业务逻辑代码。我建议你创建一个C#类库项目并在GAC中注册该DLL以在SSIS包中引用它。使DLL通用,以便在SSIS包中实现它只需要很少的代码。这样你也可以重用逻辑。

  2. 关于使用链接服务器查找,我希望我正确理解这一点。你是否说过你已经链接指向其他实例的服务器,并且你的查找是指向这些链接的服务器?如果数据库位于SQL Server实例上,为什么不直接创建指向数据库的连接字符串并进行查找?这会加速很多事情。

  3. 在包中使用了很多OLE DB命令转换吗?如果是直接插入,请尝试使用OLE DB目的地以加快速度。

  4. 看看这个SO回答How can I load a large flat file into a database table using SSIS?我已经解释了如何将行转换分割到多个目的地来加速过程。

  5. 由于您正在编写错误自定义设计的数据库,我认为这是一个好主意,有一个头 - 细节表结构来存储错误消息,而不必创建多个错误表。我更喜欢保持它更通用,所以逻辑可以适应未来的范围变化。

希望能给你一些想法。

编辑1:

我有,你会说,查找数据库DB2是一种感觉。不过,链接服务器可能会减慢软件包的速度。查找转换支持直接针对DB2数据库以及SQL Server和Oracle(MSDN)进行查询。您可以通过链接服务器避免查找。

一旦C#类库项目被编译为一个DLL,你也可以从VB.NET中引用它。只要您的DLL针对的是.NET Framework 2.0,我认为您应该善于参考SSIS 2005中的内容。

此外,还有其他方法可以根据.NET代码中嵌入的逻辑进行改进。这个逻辑是否可以写入存储过程?在这种情况下,将数据加载到登台表中,运行应用舞台数据上的逻辑的存储过程,然后将数据传输到目标表。

+0

感谢回复Siva。 RE点1;是的,这是我工作的团队所建议的,然而,有人建议这会非常缓慢(每个平面文件将处理大约20,000行)。你有没有听说过这种情况?我使用C#和SSIS 2005. SSIS 2005脚本任务仅支持VB.Net。我有从SSIS 2005调用C#程序集的问题吗? RE第3点,链接的服务器查询正在再次运行一个DB2数据库。任何你可以建议的改进?点4,也有帮助! – Brendan

+0

再次感谢Siva! – Brendan

0

如果这些数据的性质是实时的,那么您应该尽可能地在BizTalk中做。例如,XSL转换可以在流水线上实时应用,这意味着超快的基于流的处理。

您可以通过水平缩放轻松提高吞吐量,使您可以同时处理许多10甚至100个项目。

+0

谢谢休。数据不是实时的。它以散装方式散装(约20,000排)。 – Brendan

0

一对夫妇的建议...

如果您正在使用BizTalk只是从文件共享文件移动到一个SQL Server数据库表,那么我建议你采取的BizTalk出来的图片总共只有使用SSIS 。如果您不需要BizTalk提供的任何功能,则不要使用BizTalk。把事情简单化。

此外,您将使用BCP获得最佳性能。使用SSIS准备您的数据,然后使用BCP将其加载到目标数据库中。