我需要将数据从SQL Server数据库存档到Azure存储容器blob。
数据由存储过程检索(基本上返回n天之前的所有数据)。大约有140万行数据需要保存到Azure中的blob中。
这个过程需要相当长的一段时间才能完成,所以有没有方法可以加快速度呢?C#控制台应用程序用于检索数据并将其上传到Azure。以下是相关代码。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("snip");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("core-backups");
CloudBlockBlob blob = container.GetBlockBlobReference("2017/04/26/data.txt");
var data = new DataTable();
using (SqlConnection conn = new SqlConnection("snip"))
{
conn.Open();
SqlCommand getOldLogData = new SqlCommand("backup_sp", conn);
getOldLogData.CommandType = CommandType.StoredProcedure;
getOldLogData.CommandTimeout = 300;
getOldLogData.Parameters.AddWithValue("@Days", 30);
using (SqlDataAdapter adr = new SqlDataAdapter(getOldLogData))
{
adr.Fill(data);
}
}
using (var writeStream = blob.OpenWrite())
{
using (var writer = new StreamWriter(writeStream))
{
data.WriteXml(writer, XmlWriteMode.WriteSchema);
}
}保存在Azure中的文件是540 MB,所以我正在寻找一种方法来提高上传到Azure的效率,如果可能的话,如何压缩数据以便文件更小?将来,我们可能希望恢复备份的数据。
发布于 2017-04-27 04:42:15
1)如果您希望上传性能更好的文件,则需要将blobClient上的CloudBlobClient.ParallelOperationThreadCount设置为更高的值。这将在不同的线程中上传文件。您可以在fiddler中看到文件是如何发送的。
你可以在这里阅读更多关于它的内容::https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblobclient.paralleloperationthreadcount
https://blogs.msdn.microsoft.com/avkashchauhan/2012/02/21/windows-azure-blob-upload-scenarios/
2)除此之外,您可能想要对文件进行gzip压缩以减小文件大小,但每次都必须对其进行压缩/解压缩。
3)另一种选择是,如果这是一个脱机进程,您可以使用微软的AzCopy exe来上传文件。你可以在这里了解更多。
https://docs.microsoft.com/en-us/azure/storage/storage-use-azcopy
https://stackoverflow.com/questions/43643032
复制相似问题