Ho uno scenario per la mia app che è simile all'invio di una richiesta di amicizia su Facebook.MongoDB Concurrency Issue
Quando l'utente A invia una richiesta di amicizia all'utente B, internamente viene creato un nuovo documento di richiesta di amicizia. In un secondo momento, quando l'utente B vuole anche inviare una richiesta di amicizia ad A, il sistema dovrebbe scoprire che esiste un documento di richiesta di amicizia e quindi dovrebbero essere amici l'uno dell'altro, non verrà creato alcun nuovo documento di richiesta di amicizia.
Sto cercando di capire il caso in cui l'utente A e l'utente B entrambe invia contemporaneamente richiesta di amicizia tra di loro che sarà quindi creare 2 documenti amico di richiesta e che porta ad un comportamento indeterminato ...
Grazie per la vostra suggerimenti .. Davvero apprezzato!
Modifica: Alcuni avevano suggerito di utilizzare una coda di richieste per risolvere questo; tuttavia, Sono confuso sull'uso della coda perché pensavo che avrebbe reso sequenziali le richieste di processo api dell'endpoint. Non perderei tutti i vantaggi del multi-threading usando la coda? Non posso fare a meno di immaginare quanto sarebbe male se il mio servizio avesse milioni di richieste in coda e aspettasse di essere eseguito uno per uno solo a causa di questo problema. Qualcuno ha visto qualcosa con problemi simili visti in produzione?
Non significa che il mio server non elaborerà più le richieste in parallelo, il che significa che non sarà più performante come prima? – user1955934
No, solo l'operazione di scrittura di questa particolare funzionalità passerà attraverso una coda. Puoi avere lettori paralleli se vuoi –
sì, ma se c'è un carico di operazioni di scrittura in coda, la risposta non sarebbe molto lenta o addirittura un timeout? Voglio dire, vale la pena esibire un compromesso su questo raro caso? Spero che ci sia un altro modo per risolvere questo tipo di caso molto raro .. :( – user1955934