【发布时间】:2017-10-11 02:48:13
【问题描述】:
我编写了一个 C# 应用程序来将 SQL Server 表中的数据归档到 Azure blob。归档由 JSON 文件配置,从 JSON 文件检索的值指示要检索和归档的数据。
数据需要以这种格式存储在一个blob名称中
year/month/day/hour/older-than-[query-date]
其中 query-date 是当前日期减去 JSON 文件中指定的天数。
我遇到的问题是如何将压缩合并到流程中。
我们想压缩正在归档的数据以节省空间。
目前的 JSON 设置意味着任何只有 30 天以内的数据都应该被归档,但这会导致大约 370 万行数据,所以有时我会出现内存不足的异常。
无论如何,如何使用 GZip 将每行数据压缩到 Azure blob?这是现有的代码。
using (SqlDataAdapter adr = new SqlDataAdapter(comm))
{
adr.Fill(data);
data.TableName = config.TargetTableName;
}
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("blank");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
blobClient.DefaultRequestOptions.ParallelOperationThreadCount = 20;
blobClient.DefaultRequestOptions.MaximumExecutionTime = TimeSpan.FromMinutes(20);
blobClient.DefaultRequestOptions.ServerTimeout = TimeSpan.FromMinutes(20);
CloudBlobContainer container = blobClient.GetContainerReference(config.AzureContainerName);
StringBuilder jsonData = new StringBuilder();
CloudBlockBlob blob = container.GetBlockBlobReference($"{config.TargetTableName}/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{DateTime.Now.Hour}/Older-Than-{queryParameter.Value}.log");
using (var writeStream = blob.OpenWrite())
{
using (var writer = new StreamWriter(writeStream))
{
data.WriteXml(writer, XmlWriteMode.WriteSchema);
}
}
【问题讨论】:
标签: c# azure azure-blob-storage