MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Versioning di Mongoose:quando è sicuro disabilitarlo?

Lo scopo della chiave della versione è il blocco ottimistico.

Se abilitato, il valore della versione viene incrementato in modo atomico ogni volta che un documento viene aggiornato.

Ciò consente al codice dell'applicazione di verificare se sono state apportate modifiche tra un recupero (portando ad esempio la chiave di versione 42) e un conseguente aggiornamento (assicurando che il valore della versione sia ancora 42). Se la chiave di versione ha un valore diverso (ad esempio 43 perché un è stato eseguito l'aggiornamento del documento), il codice dell'applicazione può gestire la modifica simultanea.

Lo stesso concetto viene spesso utilizzato nei database relazionali invece del blocco pessimistico che può portare a prestazioni orribili. Tutti gli ORM decenti forniscono una tale funzionalità. Ad esempio, è ben descritto nella documentazione di ObjectDB . È un database di oggetti implementato in Java ma vale lo stesso concetto.

Il post del blog linkato nel commento di Behlül dimostrano l'utilità ottimistica del blocco con un esempio concreto, ma solo per le modifiche agli array, vedi sotto.

Al contrario, ecco un semplice caso in cui è inutile:un profilo utente che può essere modificato dal suo proprietario. Qui puoi sbarazzarti del blocco ottimistico e presumere che l'ultima modifica vinca sempre.

Quindi, solo tu sai se la tua applicazione necessita di un blocco ottimistico o meno. Caso d'uso per caso d'uso.

La situazione di Mongoose è alquanto speciale.

Il blocco ottimistico è abilitato solo per gli array perché il formato di archiviazione interna utilizza l'indice di posizione. Questo è il problema descritto dal post del blog linkato nel commento alla domanda. Ho trovato la spiegazione dato nel mongoose-orm mailing list abbastanza chiara:se hai bisogno di un blocco ottimistico per altri campi, devi gestirlo da solo.

Ecco un gist mostrando come implementare una strategia di ripetizione per un add operazione. Ancora una volta, il modo in cui vuoi gestirlo dipende dai tuoi casi d'uso, ma dovrebbe essere sufficiente per iniziare.

Spero che questo chiarisca le cose.

Saluti