我正在處理的應用程序的一部分是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