Konflikttyper och lösningsprinciper när du använder flera skrivregioner

GÄLLER FÖR: Nosql Mongodb Cassandra Gremlin Tabell

Konflikter och konfliktlösningsprinciper gäller om ditt Azure Cosmos DB-konto har konfigurerats med flera skrivregioner.

För Azure Cosmos DB-konton som konfigurerats med flera skrivregioner kan uppdateringskonflikter uppstå när skrivare samtidigt uppdaterar samma objekt i flera regioner. Uppdateringskonflikter kan vara av följande tre typer:

  • Infoga konflikter: Dessa konflikter kan uppstå när ett program samtidigt infogar två eller flera objekt med samma unika index i två eller flera regioner. Den här konflikten kan till exempel uppstå med en ID-egenskap.

  • Ersätt konflikter: Dessa konflikter kan uppstå när ett program uppdaterar samma objekt samtidigt i två eller flera regioner.

  • Ta bort konflikter: Dessa konflikter kan uppstå när ett program samtidigt tar bort ett objekt i en region och uppdaterar det i en annan region.

Konfliktlösningsprinciper

Azure Cosmos DB erbjuder en flexibel principdriven mekanism för att lösa skrivkonflikter. Du kan välja mellan två konfliktlösningsprinciper i en Azure Cosmos DB-container:

  • Last Write Wins (LWW): Den här lösningsprincipen använder som standard en systemdefinierad tidsstämpelegenskap. Den baseras på tidssynkroniseringsklockans protokoll. Om du använder API:et för NoSQL kan du ange andra anpassade numeriska egenskaper (t.ex. din egen uppfattning om en tidsstämpel) som ska användas för konfliktlösning. En anpassad numerisk egenskap kallas även konfliktlösningssökvägen.

    Om två eller flera objekt står i konflikt med insert- eller replace-åtgärder blir objektet med det högsta värdet för konfliktlösningssökvägen vinnaren. Systemet avgör vinnaren om flera objekt har samma numeriska värde för konfliktlösningssökvägen. Alla regioner konvergerar till en enda vinnare och får samma version av det bekräftade objektet. När det gäller borttagningskonflikter vinner den borttagna versionen alltid över antingen infognings- eller ersättningskonflikter. Det här resultatet inträffar oavsett värdet för konfliktlösningssökvägen.

    Anteckning

    Senaste skrivningsvinster är standardprincipen för konfliktlösning och använder tidsstämpel _ts för följande API:er: SQL, MongoDB, Cassandra, Gremlin och Table. Anpassad numerisk egenskap är endast tillgänglig för API för NoSQL.

    Mer information finns i exempel som använder LWW-konfliktlösningsprinciper.

  • Anpassad: Den här lösningsprincipen är utformad för programdefinierad semantik för avstämning av konflikter. När du anger den här principen för din Azure Cosmos DB-container måste du också registrera en sammanslagnings lagrad procedur. Den här proceduren anropas automatiskt när konflikter identifieras under en databastransaktion på servern. Systemet ger exakt en garanti för körning av en sammanslagningsprocedur som en del av åtagandeprotokollet.

    Om du konfigurerar containern med alternativet anpassad lösning och du inte kan registrera en sammanslagningsprocedur för containern eller om sammanslagningsproceduren utlöser ett undantag vid körning, skrivs konflikterna till konfliktflödet. Ditt program måste sedan manuellt lösa konflikterna i konfliktflödet. Mer information finns i exempel på hur du använder den anpassade lösningsprincipen och hur du använder konfliktflödet.

    Anteckning

    Anpassad konfliktlösningsprincip är endast tillgänglig för API för NoSQL-konton och kan endast anges när den skapas. Det går inte att ange en anpassad lösningsprincip för en befintlig container.

Nästa steg

Lär dig hur du konfigurerar konfliktlösningsprinciper: