我正在处理的应用程序的一部分是swf,它显示了一个包含约80个问题的测试。每个问题都通过WebORB和ASP.NET保存在SQL Server中。使用数据库或MSMQ排队?
如果候选人完成测试,则需要验证该会话。问题是,有时有350名候选人在同一时间完成测试,并且Web服务器和SQL Server上的CPU爆炸(同时发生350次验证)。
现在,我应该如何在这里实施排队?在数据库中,有一个表格为每个会话记录。一列保存状态。 1完成,2验证。
我可以实现两种方式排队(因为我看到它,也许你有其它的命题):
- 与状态1.检查表中记录的方法,如果找到了,它验证会话。所以,会话一个接一个地被验证。
- 如果候选人完成其会话,则将消息发送到MSMQ队列。另一个进程监听队列并逐一验证会话。
现在:
- 什么是最好的办法?
- 你在哪里开始验证会话的过程?在你的global.asax(application_start)?作为一个Windows服务?作为在application_start中启动的网站的根目录的exe文件?
对我来说,使用表格并查找状态为1的记录似乎是最简单的方法。
我已经使用了基于集合,但我不太清楚你的意思。我已尽可能快地进行验证(现在每个会话时间为500毫秒),但如果同时有350名候选人进行验证,则验证时间为175秒。虽然它是负载平衡的,所以实际上它是350/4秒。它的工作原理,但网络服务器的CPU在几分钟内接近100%。 – 2010-03-23 23:02:36
关于数据库编程使用“基于集合”的操作是当您发出单个数据库命令(如UPDATE)时它会影响所有行,而不是循环遍历每行并对每个行执行单独的UPDATE。我做了一个关于“基于数据库集处理”的谷歌,这里有两篇来自顶端的文章:http://www.codeproject.com/KB/database/SetAndProceduralSQL.aspx和http://weblogs.sqlteam.com/jeffs /archive/2007/04/30/60192.aspx – 2010-03-24 11:33:49