Часть приложения, над которым я работаю, - это swf, который показывает тест с 80 вопросами. Каждый вопрос сохраняется в SQL Server через WebORB и ASP.NET.Очередь с использованием базы данных или MSMQ?
Если кандидат заканчивает тест, сессия должна быть проверена. Проблема заключается в том, что иногда 350 кандидатов заканчивают свой тест в тот же момент, и процессор на веб-сервере и SQL Server взрывается (одновременно 350 подтверждений).
Теперь, как я должен реализовать очередь здесь? В базе данных есть таблица, в которой есть запись для каждого сеанса. Один столбец содержит статус. 1 завершено, 2 проверено.
Я мог бы реализовать очереди два способов (как я это вижу, может быть, у вас есть другие предложения):
- Процесс, который проверяет таблицу для записей со статусом 1. Если он находит, он проверяет сессия. Таким образом, сеансы проверяются один за другим.
- Если кандидат заканчивает свою сессию, сообщение отправляется в очередь MSMQ. Другой процесс прослушивает очередь и проверяет сеансы один за другим.
Сейчас:
- Что бы наилучший подход?
- Где вы начинаете процесс, который будет проверять сеансы? В вашем global.asax (application_start)? Как служба Windows? Как exe в корне сайта, который запущен в application_start?
Мне, используя таблицу и ищут записи со статусом 1, кажется, самый простой способ.
У меня есть набор на основе Google, но я не совсем уверен, что вы подразумеваете под этим. Я сделал проверку как можно быстрее (теперь на 500 мс за сеанс), но все же, если одновременно утверждают 350 кандидатов, это составляет 175 секунд. Хотя, он уравновешен, поэтому на самом деле это 350/4 сек. Он работает, но процессор веб-сервера работает около 100% в течение нескольких минут. –
с использованием операций «на основе набора» в отношении программирования баз данных - это когда вы выдаете единую команду базы данных, такую как UPDATE, и она затрагивает все ваши строки, в отличие от циклизации по каждой строке и выполнения отдельного UPDATE для каждого. Я сделал google для «обработки на основе базы данных» и вот две статьи из верхней части: http://www.codeproject.com/KB/database/SetAndProceduralSQL.aspx и http://weblogs.sqlteam.com/jeffs /archive/2007/04/30/60192.aspx –