Ecco il lavoro che voglio fare:
Il mio progetto è un sito web in cui ci sarà un lotto di commenti. Questi commenti saranno moderati: un moderatore si connetterà, vedrà i commenti e li accetterà o rifiuterà.
Ho bisogno di queste cose:
- i commenti non avranno alcun "moderatore" associato. Il che implica che quando un moderatore si connette, il sistema "assegna" i 20 primi commenti a questo moderatore e li invia tramite una richiesta AJAX / JSON
- naturalmente, questo implica che quei commenti non possono essere assegnati ad altri moderatori
Come posso creare un disegno in modo tale da essere sicuro che "ottenere i primi 20 commenti per un moderatore" può essere un'operazione atomica? E c'è un'altra cosa da pensare (non so se potrebbe avere un impatto o meno sul mio problema): se ci sono 10 moderatori connessi, uno di loro ha 20 commenti da convalidare, e questo ragazzo lascia il suo PC per tutto il giorno. Potrei implementare una sorta di "timeout" per questo moderatore, quindi, quando tenta di convalidare, un messaggio gli dirà "scusa questo commento è già stato moderato da un altro moderatore", e lo script AJAX otterrà un "nuovo 20 nuovi commenti ).
La mia prima idea è stata l'idea più semplice:
- un moderatore si connette
- uno script jQuery AJAX chiede al server 20 commenti
- il server (1) fa immediatamente una richiesta dei primi 20 commenti gratuiti al database
- il server (2) "blocca" i 20 commenti gratuiti
- il server (3) crea una risposta JSON e la invia
Ma le operazioni (2) e (3) non sono atomiche, cosa succede se, nel mezzo, un altro operatore chiede i primi 20 commenti gratuiti? Entrambi riceveranno i primi 20 commenti gratuiti. Questa non è una buona soluzione. Penso che questo sia un classico problema di funzionamento atomico su db. Qualche idea su come progettare questo (o dove cercare)?
Grazie davvero!