我正在处理的应用程序的一部分是一个swf,它显示了一个包含80个问题的测试。每个问题都通过WebORB和ASP.NET保存在SQL Server中。
如果考生完成考试,则需要验证会话。问题是有时350名候选人在同一时间完成测试,并且Web服务器和SQL Server上的CPU爆炸(同时进行350次验证)。
现在,我该如何在这里实施排队?在数据库中,有一个表,其中包含每个会话的记录。一栏保持状态。 1完成,2验证。
我可以通过两种方式实现排队(就像我看到的那样,也许你还有其他命题):
现在:
对我来说,使用该表并查找状态为1的记录似乎是最简单的方法。
答案 0 :(得分:4)
MSMQ方法decouples来自验证逻辑服务和数据库的面向Web的应用程序。
这带来了许多优点,其中一些优点:
处理验证逻辑每秒可处理5个会话并且一次收到300个会话的情况会更容易。否则你将不得不处理复制超时,重新尝试等。
在验证服务上进行维护会更容易,而不必中断应用程序的其余部分。当验证服务被关闭时,消息将在MSMQ中排队,并且一旦启动就会再次处理。
以上同样适用于数据库维护。
答案 1 :(得分:3)
如果您没有使用MSMQ的经验且没有设置基础设施,我会建议反对它。当然,它可能是在微软平台上进行排队的“正确”方式,但它并不是非常简单,并且具有相当的学习曲线。
创建Windows服务也是如此;除非你熟悉它,否则不要这样做。对于像这样的简单案例,我认为痛苦大于奖励。
最简单的解决方案可能是使用该表并在您在global.asax中启动的后台线程上运行该进程。您可能还想创建一个管理页面,该页面可以报告有关该过程的一些状态信息(待处理作业的数量等),如果由于某种原因失败,可能还有一个重启过程的按钮。
答案 2 :(得分:1)
什么是validating
?在制定排队策略之前,我会尝试尽快制作validating
,包括根据情况进行设置(如果不是这样)。
答案 3 :(得分:0)
我最近一直在调查这个,所以想提一下我的发现。与您的应用程序相比,数据库的位置是决定哪个选项更快的一个重要因素。
我测试了插入100个数据库条目所花费的时间,而不是将完全相同的数据记录到本地MSMQ消息中。然后我拿了几次执行此测试的结果的平均值。
我发现当数据库在本地网络上时,插入行的速度比登录MSMQ快4倍。
当通过合适的互联网连接访问数据库时,在数据库中插入行的速度比登录MSMQ慢6倍。
所以:
本地数据库 - DB更快,否则MSMQ就是。