0
我編寫了一個C#應用程序來將數據從SQL Server表中歸檔到Azure blob中。歸檔由JSON文件配置,並且從JSON文件中檢索的值指示要檢索和歸檔的數據。將數據表保存到Azure blob時如何使用GZip
的數據需要存儲在BLOB名稱以這種格式
year/month/day/hour/older-than-[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);
}
}
我在哪裏指定存儲中文件的文件名? – andrewb
您可以在container.GetBlockBlobReference方法中指定文件名。我在示例代碼中添加了一行代碼。 – Amor