我被分配实现一个应用程序(在 C++ 中)来评估待处理的提交(提交是给定问题的编程算法)。一个站点(在 ASP.NET MVC 中)发布问题并允许用户提交他们的答案,然后在数据库(SQL Server 2008R2)上将提交标记为“等待评估”,这就是我的工作开始的时候:
我将有 3 个(或更多)我的应用程序实例作为服务运行。每个实例必须每 2 秒检查一次数据库中是否存在任何待处理的提交。如果存在,我检索并编译它,编译成功后我执行它,最后,执行后检查答案的正确性。然后我更新该提交设置结果并将其从待处理表中删除。我需要在数据库中指定待提交的当前状态(编译、运行、判断)。
评估提交的时间是~(1-3)s,并且同一个实例永远不会同时评估超过一个提交。
我的问题是:如何连接到数据库服务器?我有 3 种可能的解决方案,我需要知道什么应该更好(以提高效率)以及为什么: 1 - 一旦我实例化应用程序就建立与数据库的连接并且永远不会关闭它(当我删除实例或关闭服务器时关闭它,理论上永远不会发生。) 2 - 每 2 秒打开一个连接以获得待提交(如果存在)等待完整的评估过程结束,设置评估结果,然后关闭连接。3 - 与2相同,但在我检索提交时关闭连接,当编译完成时,再次打开并更新挂起提交的状态,关闭它,当执行完成时,再次打开并更新挂起提交的状态,关闭它,最后在评审结束时打开它并设置评估结果。