Typy konfliktů a zásady řešení při použití více oblastí zápisu

PLATÍ PRO: NoSQL MongoDB Cassandra Gremlin Tabulka

Konflikty a zásady řešení konfliktů platí v případě, že je váš účet služby Azure Cosmos DB nakonfigurovaný s více oblastmi zápisu.

U účtů Azure Cosmos DB nakonfigurovaných s více oblastmi zápisu může dojít ke konfliktům aktualizací, když zapisovači současně aktualizují stejnou položku ve více oblastech. Konflikty aktualizací můžou mít následující tři typy:

  • Konflikty vkládání: K těmto konfliktům může dojít, když aplikace současně vloží dvě nebo více položek se stejným jedinečným indexem ve dvou nebo více oblastech. K tomuto konfliktu může dojít například u vlastnosti ID.

  • Nahradit konflikty: K těmto konfliktům může dojít, když aplikace současně aktualizuje stejnou položku ve dvou nebo více oblastech.

  • Konflikty odstranění: K těmto konfliktům může dojít, když aplikace současně odstraní položku v jedné oblasti a aktualizuje ji v jiné oblasti.

Zásady řešení konfliktů

Azure Cosmos DB nabízí flexibilní mechanismus řízený zásadami pro řešení konfliktů zápisu. V kontejneru Azure Cosmos DB si můžete vybrat ze dvou zásad řešení konfliktů:

  • LWW (Last Write Wins): Tato zásada řešení ve výchozím nastavení používá vlastnost časového razítka definovanou systémem. Je založená na protokolu hodin synchronizace času. Pokud používáte rozhraní API pro NoSQL, můžete zadat jakoukoli jinou vlastní číselnou vlastnost (např. vlastní pojem časového razítka), která se má použít k řešení konfliktů. Vlastní číselná vlastnost se také označuje jako cesta řešení konfliktů.

    Pokud jsou v konfliktu dvě nebo více položek při operacích vložení nebo nahrazení, stane se vítězem položka s nejvyšší hodnotou pro cestu řešení konfliktů. Systém určí vítěze, pokud má více položek stejnou číselnou hodnotu pro cestu řešení konfliktů. Všechny oblasti budou konvergovat k jednomu vítězi a skončí se stejnou verzí potvrzené položky. Pokud se jedná o konflikty odstranění, odstraněná verze vždy vyhrává nad konflikty vložení nebo nahrazení. K tomuto výsledku dojde bez ohledu na hodnotu cesty řešení konfliktů.

    Poznámka

    Služba WINS posledního zápisu je výchozí zásadou řešení konfliktů a používá časové razítko _ts pro následující rozhraní API: SQL, MongoDB, Cassandra, Gremlin a Table. Vlastní číselná vlastnost je k dispozici pouze pro rozhraní API pro NoSQL.

    Další informace najdete v příkladech, které používají zásady řešení konfliktů LWW.

  • Vlastní: Tato zásada řešení je určená pro sémantiku definovanou aplikací pro odsouhlasení konfliktů. Když tuto zásadu nastavíte pro kontejner Azure Cosmos DB, musíte také zaregistrovat uloženou proceduru sloučení. Tento postup je automaticky vyvolán při zjištění konfliktů v rámci transakce databáze na serveru. Systém poskytuje přesně jednou záruku pro provedení procedury sloučení v rámci protokolu závazku.

    Pokud nakonfigurujete kontejner s možností vlastního řešení a nepodaří se vám zaregistrovat proceduru sloučení v kontejneru nebo procedura sloučení vyvolá výjimku za běhu, konflikty se zapíšou do informačního kanálu konfliktů. Vaše aplikace pak musí ručně vyřešit konflikty v informačním kanálu konfliktů. Další informace najdete v příkladech použití vlastních zásad řešení a použití informačního kanálu konfliktů.

    Poznámka

    Vlastní zásady řešení konfliktů jsou k dispozici pouze pro účty rozhraní API pro NoSQL a je možné je nastavit pouze při vytváření. U existujícího kontejneru není možné nastavit vlastní zásady řešení.

Další kroky

Informace o konfiguraci zásad řešení konfliktů: