选择哪一种数据库连接方式,这个问题在开发者社区当中一直争论不休。
性能通常被视作首要的鉴别标准。一般来讲ADO.NET的性能不如ODBC与OLE DB,因为他是一个托管提供程序。但是由于大多数应用只进行增删改查操作,这种差异往往可以忽略不计。
然而,作为BI开发者,我们通常需要处理庞大的数据集。因此我们不能忽略任何微小的性能差异,尤其是在实现SSIS数据流任务时。
(原作者的测试方法省略,这里直接把测试结果搬上来)
Source | Destination | Records | Data (MB) | Elapsed Time (s) | MB/s |
OLE DB | ADO.NET | 10,000,000 | 639.727 | 2:16.543 | 4.685 |
OLE DB | ADO.NET | 1,000,000 | 63.973 | 13.004 | 4.919 |
OLE DB | ADO.NET | 100,000 | 6.397 | 1.347 | |
OLE DB | ADO.NET | 10,000 | 0.640 | 0.265 | |
OLE DB | OLE DB | 10,000,000 | 639.727 | 43.394 | 14.742 |
OLE DB | OLE DB | 1,000,000 | 63.973 | 4.649 | 13.760 |
OLE DB | OLE DB | 100,000 | 6.397 | 0.577 | |
OLE DB | OLE DB | 10,000 | 0.640 | 0.156 |
- 测试结果发现,在读取大量数据行时,OLE DB Source速度大约是ADO.NET Source的2.5倍,大约是ODBC Source的3.8倍。
- 当使用同样的OLE DB Source在SQL Server数据库之间转移大量数据时,OLE DB Destination 的速度大约是ADO.NET Destination 速度的3倍。
- 尽管我选择了表加载-批处理(Table Load – Batch)的数据访问模式,ODBC Destination 仍旧是执行逐行插入(row-by-row inserts)。这对于操作大数据集是不可接受的。我需要进一步调查这个问题,以确定解决方案。
- 我的数据源和目的地数据库,与SSIS服务器都配置在同一台服务器上。这样确保我的测试流程不受网络延迟或限制的影响。正因为这一点我的测试流程可以说是有争议的。我将尽可能地在更为真实的环境上重复这套测试。
- 尽管测试结果的数字没有统计学意义,并且在测试流程上有着缺陷。但我认为该结果仍旧可以证明坊间的建议,OLE DB是构建SSIS数据流时的第一选择。
(原文链接: https://datatellblog.wordpress.com/2015/01/13/ssis-data-flows-ado-net-vs-ole-db-vs-odbc/ )
Source | Destination | Records | Data (MB) | Elapsed Time (s) | MB/s |
OLE DB | ADO.NET | 10,000,000 | 639.727 | 2:16.543 | 4.685 |
OLE DB | ADO.NET | 1,000,000 | 63.973 | 13.004 | 4.919 |
OLE DB | ADO.NET | 100,000 | 6.397 | 1.347 | |
OLE DB | ADO.NET | 10,000 | 0.640 | 0.265 | |
OLE DB | OLE DB | 10,000,000 | 639.727 | 43.394 | 14.742 |
OLE DB | OLE DB | 1,000,000 | 63.973 | 4.649 | 13.760 |
OLE DB | OLE DB | 100,000 | 6.397 | 0.577 | |
OLE DB | OLE DB | 10,000 | 0.640 | 0.156 |