我有一个C#控制台应用程序,它将服务器位置上的15GB FireBird数据库文件提取到多个文件,并将数据从文件加载到SQLServer数据库。控制台应用程序使用System.Threading.Tasks.Parallel类来执行dataload从文件到sqlserver数据库的并行执行。
这是一个每周过程,需要6个小时才能完成。
将此(控制台应用程序)流程移至azure云 - WebJob或WorkerRole或任何其他云服务的最佳选择是什么?
如何在迁移到云后缩短执行时间(6小时)?
如何实施建议的选项?请提供指针或代码示例等。
非常感谢您对详细评论的帮助。
由于
巴努•。
答案 0 :(得分:2)
让我对你的这个问题进行一些思考
"将此(控制台应用程序)进程移动到的最佳选项是什么 azure cloud - WebJob或WorkerRole还是其他任何云服务?"
首先,您可以使用WebJob和WorkerRole完成任务,但我建议您使用WebJob。
关于WebJob的PROS是:
部署时间更快,您可以在没有任何更改的情况下将控制台应用程序转换为继续运行的webjob(https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/)
内置计时器支持,您需要自己处理的WorkerRole
容错,当您的WebJob失败时,内置恢复逻辑
答案 1 :(得分:1)
您可能想要查看Azure功能。您只需支付使用的处理时间,并且似乎没有最长的运行时间(与AWS Lambda不同)。
他们可以按计划安排或从其他活动开始。
如果您已经并行工作,可以将一些并行任务分解为单独的azure函数。除此之外,如何加快速度需要具体了解您要完成的任务。
过去当我试图加快这样的工作时,我会先处理包含当前时间或计算持续时间的处理过程中的日志消息(使用StopWatch类)。然后找出哪些方面可以改进。缓慢也可能是由于SQL Server端的速度减慢。您需要进行更多调查。但第一步始终是捕捉指标。
由于Azure功能可以横向扩展,您可能希望首先将文件中的数据分成较小的块,然后让函数处理每个块。然后启动这些块的多个并行处理。确保不要超过SQL Server可以处理的速度。