FAQ sul controllo delle versioni dei documenti e sui conflitti

Quando si utilizzano database distribuiti, le copie dei dati potrebbero essere memorizzate in più ubicazioni. Mantenere questi dati sincronizzati è importante. Tuttavia, il proprio ambiente di lavoro potrebbe impedire agli utenti di aggiornare immediatamente i documenti con le relative modifiche o anche di replicare nel database.

Di conseguenza, le copie di un documento potrebbero avere diversi aggiornamenti. I "conflitti" si verificano perché IBM® Cloudant® for IBM Cloud® non è in grado di determinare quale copia è corretta.

IBM Cloudant utilizza MVCC (multi - version concurrency control) per assicurare che tutti i nodi in ogni cluster di database includano solo la versione più recente di un documento.

Qual è la consistenza finale?

IBM Cloudant i database sono eventualmente congruenti, il che significa che IBM Cloudant deve garantire che non vi siano differenze tra i nodi. Queste incongruenze possono verificarsi quando i documenti non aggiornati vengono sincronizzati.

È importante che i database IBM Cloudant abbiano accesso simultaneo in lettura e scrittura. MVCC abilita tale funzionalità. MVCC è una forma di controllo della simultaneità ottimistico che rende le operazioni di lettura e scrittura sui database IBM Cloudant più veloci perché un blocco del database non è necessario per le operazioni di lettura e scrittura. Allo stesso tempo, MVCC abilita la sincronizzazione tra nodi di database IBM Cloudant .

Come faccio a sapere se c'è un conflitto?

Non lo sai. A volte si richiede un documento che ha un conflitto. In questi momenti, IBM Cloudant restituisce il documento normalmente, come se non esistesse alcun conflitto. Tuttavia, la versione che viene restituita non è necessariamente la versione più recente. Invece, la versione viene selezionata in base a un algoritmo interno che considera più fattori. Non si deve presumere che quando i documenti vengono restituiti siano sempre i più attuali.

Come è possibile identificare un documento con un conflitto?

Se esiste un conflitto con un documento e tenti di aggiornarlo, IBM Cloudant restituisce una risposta 409. Se tenti di aggiornare un documento mentre sei offline, IBM Cloudant non può controllare la presenza di potenziali conflitti e non ricevi una risposta 409.

Quando si verifica questa situazione, è meglio controllare i conflitti di documenti quando si è di nuovo in linea. Se è necessario trovare conflitti di documenti, utilizzare la seguente funzione di associazione di esempio:

function (doc) {
  if (doc._conflicts) {
    emit(null, [doc._rev].concat(doc._conflicts));
  }
}

Se si desidera trovare dei conflitti all'interno di più documenti in un database, scrivere una vista.

Cosa succede se ignoro i conflitti?

Se non controlli i conflitti o non li correggi, il tuo database IBM Cloudant ha i seguenti problemi:

  • L'incoerenza dei documenti aumenta perché i documenti in conflitto continuano a moltiplicarsi.
  • La dimensione del database aumenta perché i documenti con conflitti devono essere conservati fino a quando il conflitto non viene risolto.
  • Le prestazioni peggiorano perché richiede più lavoro per IBM Cloudant per rispondere a ciascuna richiesta poiché deve esaminare tutti i documenti in conflitto per trovare la versione "migliore possibile".

Come risolvere i conflitti?

Dopo aver trovato un conflitto, seguire questi quattro passaggi per risolverlo.

  1. Ottieni le revisioni in conflitto.
  2. Unirli nell'applicazione o chiedere al proprietario cosa fare.
  3. Carica la nuova revisione.
  4. Elimina le vecchie revisioni.