Una parte dell'applicazione su cui sto lavorando è una swf che mostra un test con circa 80 domande. Ogni domanda viene salvata in SQL Server tramite WebORB e ASP.NET.Accodamento utilizzando il database o MSMQ?
Se un candidato termina il test, la sessione deve essere convalidata. Il problema è che a volte 350 candidati terminano il test nello stesso momento e la CPU sul server Web e su SQL Server esplode (350 convalide contemporaneamente).
Ora, come devo implementare l'accodamento qui? Nel database, c'è una tabella che ha un record per ogni sessione. Una colonna mantiene lo stato. 1 è finito, 2 è convalidato.
ho potuto implementare la fila in due modi (come la vedo io, forse hai altre proposte):
- Un processo che controlla la tabella per i record con lo stato 1. Se ne trova uno, convalida il sessione. Quindi, le sessioni vengono convalidate una dopo l'altra.
- Se un candidato termina la sua sessione, un messaggio viene inviato a una coda MSMQ. Un altro processo ascolta la coda e convalida le sessioni una dopo l'altra.
Ora:
- Quale sarebbe l'approccio migliore?
- Da dove si avvia il processo che convaliderà le sessioni? Nel tuo global.asax (application_start)? Come servizio di Windows? Come exe sulla radice del sito Web avviato in application_start?
Per me, utilizzare la tabella e cercare i record con lo stato 1 sembra il modo più semplice.
Ho cercato su Google, ma non sono abbastanza sicuro di cosa intendi. Ho fatto la convalida il più velocemente possibile (ora a 500ms per sessione), ma ancora, se 350 candidati convalidano allo stesso tempo, fa 175 secondi. Sebbene sia carico-bilanciato, quindi in realtà è 350/4 sec. Funziona, ma la CPU del server web si avvicina al 100% per alcuni minuti. –
utilizzando le operazioni "set based" per quanto riguarda la programmazione del database si ha quando si emette un singolo comando di database, come UPDATE e questo ha effetto su tutte le righe, invece di eseguire il loop su ogni riga e fare un UPDATE separato su ciascuna. Ho fatto un google su "elaborazione basata su set di database" e qui ci sono due articoli da vicino: http://www.codeproject.com/KB/database/SetAndProceduralSQL.aspx e http://weblogs.sqlteam.com/jeffs /archive/2007/04/30/60192.aspx –