2013-06-30 38 views
1

我被分配来实现一个应用程序(使用C++)来评估待处理的提交(提交是针对给定问题的编程算法)。一个站点(在ASP.NET MVC中)发布问题并允许用户提交他们的答案,然后将提交内容标记为数据库(SQL Server 2008R2)上的“待评估”,即我的工作开始时:DB的长时间连接或按需连接?

我将有3个(或更多)我的应用程序作为服务运行。 每个实例必须每2秒检查一次数据库中是否存在未决提交。 如果它存在,我检索并编译它,成功编译后执行它,最后在执行后检查答案的正确性。然后我更新提交设置结果并从待处理表中删除它。 我需要在数据库中指定待处理提交(编译,运行,判断)的当前状态。

评估一个子协议的时间是〜(1-3)s,同一个实例永远不会同时评估更多的一个提交。

我的问题是:如何连接到数据库服务器? 我有3个可能的解决方案,我需要知道什么应该更好(为了提高效率),为什么: 1 - 建立一个连接到数据库,一旦我实例化应用程序,永远不会关闭它(关闭它,当我删除实例或关闭服务器,理论上永远不会发生。) 2 - 为了获得待定提交(如果存在),等待完整评估过程结束,设置评估结果并然后关闭连接。 3 - 与2相同,但在检索提交时关闭连接,编译完成时再次打开并更新待处理提交的状态,关闭它,执行完成时再次打开并更新待处理提交的状态,关闭它最后在评审结束时打开并设置评估结果。

+0

根据池的需求,如果你可以做到这一点。使您的代码更清洁 –

+0

从技术上讲,出于性能原因,您的连接应该是长期存在的。这就是说,这是一个基础设施层问题,应该使用连接池来处理。 (如果我阅读文档,ODBC似乎有一个内置的权限:http://msdn.microsoft.com/en-us/library/ms716319.aspx)您的应用程序代码本身应该只保留在连接上因为它需要完成交易。 (就你而言,提交的单一状态转换。) – millimoose

回答

1

你不说你正在使用哪个数据库访问库(ODBC,ado.net,other?)。打开和关闭数据库连接是一项相对昂贵的操作。您应该在您的数据库访问框架中使用某种连接池方案。连接池打开一段时间,当您的应用程序打开连接时,它将从池中获得一个已经打开的连接。这将使它更有效率。去看看connection pooling SQL Server的