0

我有一个将大型CSV(500 MB至10+ GB)复制到SQL Azure表格中的Azure Webjob。我每天都会得到一个新的CSV,而且我只保留1个月的记录,因为将它们保留在SQL中是很昂贵的,所以它们非常不稳定。Azure Webjobs一次处理的斑点数量有限

为了让他们开始,我批量上传了上个月的数据(〜200 GB),同时我看到所有30个CSV文件都得到了处理。这导致在上传一个非常疯狂的备份,如通过这样的画面:

Webjob results

我有大约5页看起来像这样计算所有的重试。 如果我一次上传2个,一切正常!但从运行时间可以看出,有些可能需要14个多小时才能完成。

我想要做的是批量上传30个CSV并让Webjob一次只处理3个文件,然后一旦完成,就开始下一个。这与目前的SDK可能吗?

回答

5

是的,绝对有可能。

假设您在此使用的模式是使用计划或按需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(); 
} 

如果你想看看这是什么样子的动作随意克隆此GitHub库我最近发表的关于如何使用WebJobs和AzCopy创建自己的Blob备份服务。我遇到了同样的问题,因为我无法一次运行太多的工作。

https://github.com/markjbrown/AzCopyBackup

希望这是有帮助的。

编辑,我差点忘了。虽然您可以更改上面的BatchSize属性,但您也可以利用拥有多个虚拟机的主机并处理这些作业,这基本上允许您将其扩展为多个独立的并行进程。您可能会发现可以放大虚拟机的数量并快速处理数据,而不必使用BatchSize对其进行调整。

+0

感谢您的回复!同时处理全部30个数据不是处理器或内存问题,而是我担心的数据库吞吐量。我会尝试像你说的那样排队结果,并且看看我在哪里,但是我必须从blob上的触发切换到队列上的触发。 – 2015-03-25 20:07:21

+0

你实际上可以在一个链中编写两个不断运行的作业。 (我知道这听起来很荒谬)。一个监控写入队列的博客,然后另一个监控插入到DB中的队列,然后可以在BatchSize上进行节制。 – 2015-03-26 00:01:19

+0

使用信号灯怎么样?你认为这会起作用吗? – 2015-03-27 00:37:09