joe*_*ish 0 azure azure-storage-blobs azure-webjobs azure-sql-database
我有一个Azure Webjob,可以将大型CSV(500 MB到10+ GB)复制到SQL Azure表中.我每天都会获得一个新的CSV并且我只保留1个月的记录,因为将它们保存在SQL中是很昂贵的,所以它们非常不稳定.
为了让它们开始,我批量上传了上个月的数据(~200 GB),我看到所有30个CSV文件同时被处理.这导致上传中非常疯狂的备份,如下图所示:

我有大约5页看起来像这样计算所有的重试.如果我一次上传2个,一切都很棒!但是从运行时间可以看出,有些可能需要14个多小时才能完成.
我想要做的是批量上传30个CSV并让Webjob一次只处理3个文件,然后一旦完成,就开始下一个.这可能与当前的SDK有关吗?
是的,绝对可能.
假设您在这里使用的模式是使用在队列上弹出消息的Scheduled或On-Demand WebJobs,然后由持续运行的WebJob拾取,该WebJob处理来自队列的消息,然后完成工作,您可以使用JobHost. Queues.BatchSize属性,用于限制一次可以处理的队列消息数.H
static void Main()
{
    JobHostConfiguration config = new JobHostConfiguration();
    //AzCopy cannot be invoked multiple times in the same host
    //process, so read and process one message at a time
    config.Queues.BatchSize = 1;
    var host = new JobHost(config);
    host.RunAndBlock();
}
如果你想看看它的实际效果,请随时克隆我最近发布的关于如何使用WebJobs和AzCopy创建自己的Blob备份服务的GitHub repo.我遇到了同样的问题,即我不能同时运行太多工作.
https://github.com/markjbrown/AzCopyBackup
希望有所帮助.
编辑,我差点忘了.虽然您可以更改上面的BatchSize属性,但您也可以利用多个VM的主机并处理这些作业,这基本上允许您将其扩展为多个独立的并行进程.您可能会发现可以非常快速地扩展VM的数量并处理数据,而不必使用BatchSize来限制它.
| 归档时间: | 
 | 
| 查看次数: | 775 次 | 
| 最近记录: |