如何使用SQL在家中对分布式计算作业进行排队?

时间:2015-09-29 17:18:51

标签: sql-server queue sql-server-express labview

我使用LabVIEW(工程软件框架/编程语言)编写的应用程序来运行大约两万次模拟。每个模拟大约需要5分钟完成,结果将被转储到我本地网络中的笔记本电脑中托管的数据库中。我使用SQL Express作为我的数据库。

每个模拟作业都有一组将传递给应用程序的起始参数。这可能就像应用程序将解析为有效模拟特征的一串字符一样简单,但我不确定如何构造它。

因为模拟在一台计算机上运行大约需要3个月,所以我想为数据库计算机添加能够安排"工作。这样,我可以在我的本地网络中的任何计算机上运行应用程序(我有5个可用)进行一些模拟,并在我需要将其用于其他事情时停止模拟。数据库计算机将在应用程序请求时分发这些作业,并自行连续运行作业。

如何从SQL的角度来设置此队列?我目前想到的框架将是这样的:除了用于存储模拟数据的表之外,数据库还有3个表。这些表包含CompletedJobs,RunningJobs和JobsToRun。应用程序将从JobsToRun请求作业,并将该作业的ID放入RunningJobs表中。然后,它将解析作业的ID以获取相关信息,运行模拟,如果它没有出错,则将作业ID移动到CompletedJobs表。

这会有用吗?

1 个答案:

答案 0 :(得分:1)

我认为不需要三个表 - 为什么没有一个表JobsJobStatus字段可以取值(例如) ToRun 正在运行已完成,也许失败 - 您可能会想到其他人。当模拟开始新作业时,它会将状态更改为正在运行,当它完成作业时,它会再次将其更改为已完成失败

如果您的模拟可能因不同类型的错误而失败,您可能需要StartTimeEndTime的字段,可能需要ErrorCode?模拟的输出包括什么 - 您应该存储输出文件的文件名,还是将输出数据本身作为BLOB上传?让数据库负责为每个作业分配一个唯一的ID,这将是数据库表的主键。

实际上哪种数据是起始参数?如果可以将它们存储在数据库字段中,请执行此操作。如果需要,可以将它们放在第二个表中,并让Jobs表引用作业参数表中的参数集ID。