根据数据库中的数据运行大量活动功能

时间:2019-12-08 20:08:47

标签: azure-functions azure-durable-functions

我们有一个大约40万个需要计算的元素的数据库。下面显示了一个协调器功能的示例。

[FunctionName("Crawl")]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext context)
{
   if (!context.IsReplaying)
   {
   }

   WriteLine("In orchistration");
   var outputs = new List<string>();

   var tasks = new Task<string>[3];

   var retryOptions = new RetryOptions(
       firstRetryInterval: TimeSpan.FromSeconds(60),
       maxNumberOfAttempts: 3);

   // Replace "hello" with the name of your Durable Activity Function.
   tasks[0] = context.CallActivityWithRetryAsync<string>("Crawl_Hello",retryOptions, "Tokyo");
   tasks[1] = context.CallActivityWithRetryAsync<string>("Crawl_Hello", retryOptions, "Seattle");
   tasks[2] = context.CallActivityWithRetryAsync<string>("Crawl_Hello",retryOptions, "London");

   await Task.WhenAll(tasks);

   return outputs;
}

每次调用一项活动时,都会调用编排功能。但是我不想每次调用一个活动时就从数据库中获取40万个项目。只是将所有活动代码添加到if语句中,或者什么是正确的方法?我看不到使用WaitAll函数。

1 个答案:

答案 0 :(得分:0)

  

好像您已经在other query中提到的那样,已经找到了解决问题的方法,但是为了他人的利益在此进行了详细说明。

理想情况下,您应该有一个活动函数,该函数首先要首先获取所需的所有数据,然后对它们进行批处理,然后调用另一个处理该数据的活动函数。

由于要计算的元素很多,因此最好将计算分为单独的sub-orchestrators,因为扇入操作是在单个实例上执行的。

为进一步阅读,有一些documented performance targets在部署持久功能时可能会有所帮助。