【问题标题】:Webjobs and large database queriesWebjobs 和大型数据库查询
【发布时间】:2016-08-21 14:04:11
【问题描述】:

如果需要查询一个包含 100,000 行以上结果集的数据库。然后我需要在哪里处理这些数据。这可以在连续的网络作业中成功完成吗?如果是这样,队列是如何管理的?我目前有这个问题

Webjob query being limited by take not processing any further data when triggered, or when being interrupted will not continue processing queue

其中讨论了使用带有时间触发器的连续网络作业的问题。如果 webjob 重新启动,队列将被转储,转储的意思是,队列不再被处理。如果使用take 来限制查询中的行,则下一个 pollevent 不会处理任何数据。

这些网络作业在后台管理了这么多,其中有些很难很好地掌握来管理大型队列。

我的问题:

网络作业是否适合处理大量数据?

如果是这样,它们应该是连续的还是计划的?为什么?

【问题讨论】:

  • 不知道你为什么要发布 cmets 告诉人们如何投票/不投票。这不是 StackOverflow 的工作方式(但你应该知道,考虑到你几乎 12K 的代表)。
  • 看起来像 this one 的副本。
  • 当然,他们可以处理大量数据。但是触发机制 afaik 不在 sql 触发器中,而是在您创建的其他东西中。这意味着您编写了一些熟化的代理来执行触发器。然后它可以对您的 database with a resulting set of 100,000 rows plus 起作用。我不知道我会让它连续。无论如何,他们都容易失败。我建议利用队列机制进行状态检查和工作流,这样任何失败的网络作业都可以重新振作起来。
  • 这就引出了一个问题,为什么还要在网络作业中使用它。当您拥有 c# 应用程序(或其他)并确定更流畅的时间表时,为什么要创建一些类似 cron 的表达式或门户。当我说流体时,我的意思是,它会根据你构建的启发式方法而变化
  • 我在另一个平台上与人合作,但类比是相同的。我尝试做的第一件事是构建一个单独的代理。因为我总是对事件调度程序的僵化或它的力量感到失望。意思是,它不允许某些调用。所有这一切都随着代理而消失。所以,是的,正如你所说,他们可以做很多事情。但我们必须为不能做的事情做好准备。在我们的例子中,“数据加载”是被禁止的(不是我们而是框架)。还有其他限制。此外,我们需要在失败时具有弹性(有点像 Erlang 的 Let it Crash via Akka)

标签: asp.net azure azure-webjobs


【解决方案1】:

网络作业是否适合处理大量数据?

当然,为什么不呢?如果出于某种原因,您不信任 WebJobs SDK,那么没有什么能阻止您编写一个简单的控制台应用程序来执行所有处理并将其部署为 WebJob。这样,您就不会隐藏或“管理”任何东西。

如果是这样,它们应该是连续的还是计划的?为什么?

连续的 WebJob 通常在触发器的上下文中是有意义的。 您有一些工作等待处理,您可以使用存储队列消息或您选择的其他机制 (custom triggers) 发出信号。

一个预定的 WebJob,嗯……它按计划工作。你是否有一个?那就这样吧。

如果这些都不足以形成一个明确的选择,为什么不根据您自己的外部逻辑手动触发它?

来自https://github.com/projectkudu/kudu/wiki/WebJobs-API#invoke-a-triggered-job

调用触发的作业
POST /api/triggeredwebjobs/{job name}/run

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2011-09-15
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多