Domanda

Ecco il lavoro che voglio fare:

Il mio progetto è un sito web in cui ci sarà un quantità di commenti. Quei commenti saranno moderati: un moderatore si collegherà, vedrà commenti e accetterà o li rifiuterà.

Ho bisogno di queste cose:

  • I commenti non avranno alcun "moderatore" associato. Il che implica che quando un moderatore si collega, il sistema "assegna" i 20 primi commenti a questo moderatore, quindi li invia tramite una richiesta AJAX/JSON
  • Naturalmente, ciò implica che quei commenti non siano assegnati ad altri moderatori

Come posso fare un design in modo da essere sicuro che "ottenere i 20 primi 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 un "timeout" per questo moderatore, quindi, quando cerca di convalidare, un messaggio gli dirà "Mi dispiace che questo commento sia già stato moderato da un altro moderatore", e lo script Ajax riceverà un "nuovo 20 commenti ).

La mia prima idea è stata l'idea più semplice:

  • un moderatore si collega
  • Uno script JQuery Ajax chiede al server 20 commenti
  • Il server (1) fa immediatamente una richiesta dei 20 primi commenti gratuiti al database
  • Il server (2) "congela" i 20 commenti gratuiti
  • Il server (3) costituisce 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 20 primi commenti gratuiti? Entrambi riceveranno i 20 primi commenti gratuiti. Non è una buona soluzione. Penso che questo sia un problema classico dell'operazione atomica su DB. Qualche idea su come progettare questo (o dove cercare)?

Molte grazie!

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top