Une partie de l'application sur laquelle je travaille est un swf qui montre un test avec environ 80 questions. Chaque question est enregistrée dans SQL Server via WebORB et ASP.NET.Mise en file d'attente à l'aide de la base de données ou de MSMQ?
Si un candidat termine le test, la session doit être validée. Le problème est que quelquefois 350 candidats terminent leur test au même moment, et la CPU sur le serveur web et SQL Server explose (350 validations en même temps).
Maintenant, comment dois-je implémenter la mise en file d'attente ici? Dans la base de données, il y a une table qui a un enregistrement pour chaque session. Une colonne contient le statut. 1 est terminé, 2 est validé.
je pourrais mettre en œuvre des files d'attente de deux façons (comme je le vois, peut-être que vous avez d'autres propositions):
- Un processus qui vérifie la table des enregistrements avec le statut 1. Si elle trouve un, il valide la session. Ainsi, les sessions sont validées une après l'autre.
- Si un candidat termine sa session, un message est envoyé à une file d'attente MSMQ. Un autre processus écoute la file d'attente et valide les sessions une après l'autre.
maintenant:
- Quelle serait la meilleure approche?
- Où commencez-vous le processus qui va valider les sessions? Dans votre global.asax (application_start)? En tant que service Windows? En tant qu'exe à la racine du site Web démarré dans application_start?
Pour moi, l'utilisation de la table et la recherche d'enregistrements avec le statut 1 semble le moyen le plus facile.
J'ai basé sur googled basé, mais je ne suis pas tout à fait sûr de ce que vous entendez par là. J'ai fait la validation aussi vite que possible (maintenant à 500ms par session) mais quand même, si 350 candidats valident en même temps, cela fait 175 secondes. Bien que, il est loadbalanced, donc en fait c'est 350/4 sec. Cela fonctionne mais le processeur de webserver est proche de 100% pendant quelques minutes. –
en utilisant des opérations "set based" en ce qui concerne la programmation de base de données est lorsque vous émettez une seule commande de base de données, comme UPDATE et affecte toutes vos lignes, par opposition à chaque ligne et faire une mise à jour séparée sur chacun. J'ai fait un google sur "base de données base de traitement" et voici deux articles de près du sommet: http://www.codeproject.com/KB/database/SetAndProceduralSQL.aspx et http://weblogs.sqlteam.com/jeffs /archive/2007/04/30/60192.aspx –