Share via


Tipi di conflitto e criteri di risoluzione durante l'uso di più aree di scrittura

SI APPLICA A: NoSQL MongoDB Cassandra Gremlin Tabella

I conflitti e i criteri di risoluzione dei conflitti sono applicabili se l'account Azure Cosmos DB è configurato con più aree di scrittura.

Per gli account Azure Cosmos DB configurati con più aree di scrittura, i conflitti di aggiornamento possono verificarsi quando i processi di scrittura aggiornano contemporaneamente lo stesso elemento in più aree. I conflitti di aggiornamento vengono classificati nei tre tipi seguenti:

  • Conflitti di inserimento: questi conflitti possono verificarsi quando un'applicazione inserisce contemporaneamente due o più elementi con lo stesso indice univoco in due o più aree. Ad esempio, questo conflitto potrebbe verificarsi con una proprietà ID.

  • Conflitti di sostituzione: questi conflitti possono verificarsi quando un'applicazione aggiorna lo stesso elemento contemporaneamente in due o più aree.

  • Conflitti di eliminazione: questi conflitti possono verificarsi quando un'applicazione elimina contemporaneamente un elemento in un'area e lo aggiorna in un'altra area.

Criteri di risoluzione dei conflitti

Azure Cosmos DB offre un meccanismo flessibile basato su criteri per risolvere i conflitti di aggiornamento. In un contenitore Azure Cosmos DB è possibile selezionare tra due criteri di risoluzione dei conflitti:

  • Last Write Wins (LWW): questo criterio di risoluzione per impostazione predefinita usa una proprietà Timestamp definita dal sistema. Si basa sul protocollo di sincronizzazione dell'ora dell'orologio. Se si usa l'API for NoSQL, è possibile specificare qualsiasi altra proprietà numerica personalizzata (ad esempio una nozione personalizzata di un timestamp) da usare per la risoluzione dei conflitti. Una proprietà numerica personalizzata è denominata anche percorso di risoluzione dei conflitti.

    Se due o più elementi sono in conflitto su operazioni di inserimento o sostituzione, l'elemento con il valore massimo per il percorso di risoluzione dei conflitti diventa il vincitore. Il sistema determina il vincitore se più elementi hanno lo stesso valore numerico per il percorso di risoluzione dei conflitti. Tutte le aree convergono su una singola ultima scrittura e si ritrovano con la stessa versione dell'elemento di cui si esegue il commit. Quando sono coinvolti i conflitti di eliminazione, la versione eliminata prevale sempre sui conflitti di inserimento o sostituzione. Questo risultato si verifica indipendentemente dal valore del percorso di risoluzione dei conflitti.

    Nota

    Last Write Wins è il criterio di risoluzione dei conflitti predefinito e usa il timestamp _ts per le API seguenti: SQL, MongoDB, Cassandra, Gremlin e Tabella. La proprietà numerica personalizzata è disponibile solo per l'API for NoSQL.

    Per altre informazioni, vedere gli esempi d'uso dei criteri di risoluzione dei conflitti LWW.

  • Personalizzato: questo criterio di risoluzione è stato progettato per la semantica definita dall'applicazione per la riconciliazione dei conflitti. Quando si imposta questo criterio per il contenitore Azure Cosmos DB, è anche necessario registrare una stored procedure di tipo merge, che viene richiamata automaticamente quando vengono rilevati conflitti in una transazione di database nel server. Il sistema fornisce esattamente una volta la garanzia per l'esecuzione di una routine di tipo merge come parte del protocollo di impegno.

    Tuttavia, se si configura il contenitore con l'opzione di risoluzione personalizzata ma non si riesce a registrare una stored procedure di tipo merge sul contenitore oppure la stored procedure di tipo merge genera un'eccezione in fase di esecuzione, i conflitti vengono scritti nel feed dei conflitti. L'applicazione deve quindi risolvere manualmente i conflitti nel feed dei conflitti. Per altre informazioni, vedere gli esempi di utilizzo dei criteri di risoluzione personalizzati e del feed dei conflitti.

    Nota

    I criteri di risoluzione dei conflitti personalizzati sono disponibili solo per gli account API per NoSQL e possono essere impostati solo in fase di creazione. Non è possibile impostare criteri di risoluzione personalizzati in un contenitore esistente.

Passaggi successivi

Informazioni su come configurare i criteri di risoluzione dei conflitti: