SqlBulkCopy Azure DataTable比Streaming更快

时间:2014-11-17 11:57:33

标签: azure azure-storage azure-storage-blobs sqlbulkcopy lumenworks

我需要一个worker角色,它从Blob获取一个txt文件并将其批量转换为Azure Sql表。

我正在使用LumenWorks.Framework.IO提供的SqlBulkCopy, 我创建了2个版本的worker角色: 1)读取整个文件,将其加载到DataTable中,执行SqlBulkCopy 2)StreamRead文件并将Stream传递给SqlBulkCopy

问题是第二个版本的性能是第一个版本的一半。

作为10MB txt文件的示例,具有90'000条记录: - 第一个版本:加载文件半秒,转换为DataTable需要2秒,SqlBulkCopy需要20秒

- 第二版:总共50秒(超过两倍!)

我试图更改BatchSize但它似乎没有太大的区别,我不知道我做错了什么,这里是2'版本代码:

using (var stream = await blockBlob.OpenReadAsync(cancellationToken))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader, true, ';'))
using (var conn = new SqlConnection(CloudConfigurationManager.GetSetting("TestDbConn")))
{
      await conn.OpenAsync(cancellationToken);
      connAperta = true;
      using (var transaction = conn.BeginTransaction())
      using (var bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.TableLock, transaction))
      {
             bulkCopy.BulkCopyTimeout = 300;
             bulkCopy.DestinationTableName = "[3sc_base_1]";
             await bulkCopy.WriteToServerAsync(csv, cancellationToken);
             transaction.Commit();
      }
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

查看bulk upload directly from an Azure Storage account的新Azure SQL数据库功能。

这应该是实现您想要的最快速,最简单的方法,除非您不是直接流式传输,而是进行转换。