Sdílet prostřednictvím


Omezení jedinečných klíčů ve službě Azure Cosmos DB

PLATÍ PRO: NoSQL

Jedinečné klíče přidávají do kontejneru Azure Cosmos DB vrstvu integrity dat. Při vytváření kontejneru Azure Cosmos DB vytvoříte jedinečnou zásadu klíče. Pomocí jedinečných klíčů se ujistěte, že jedna nebo více hodnot v rámci logického oddílu je jedinečná. Můžete také zaručit jedinečnost na klíč oddílu.

Po vytvoření kontejneru s jedinečnými zásadami klíče se zabrání vytvoření nové nebo aktualizace existující položky, která vede k duplikaci v rámci logického oddílu, jak je určeno omezením jedinečného klíče. Klíč oddílu v kombinaci s jedinečným klíčem zaručuje jedinečnost položky v rámci oboru kontejneru.

Představte si například kontejner Azure Cosmos DB s Email address omezením jedinečného klíče a CompanyID jako klíčem oddílu. Při konfiguraci e-mailové adresy uživatele s jedinečným klíčem má každá položka jedinečnou e-mailovou adresu v daném CompanyIDobjektu . Dvě položky nelze vytvořit s duplicitními e-mailovými adresami a se stejnou hodnotou klíče oddílu. V rozhraní API služby Azure Cosmos DB pro NoSQL se položky ukládají jako hodnoty JSON. U těchto hodnot JSON se rozlišují malá a velká písmena. Když jako jedinečný klíč zvolíte vlastnost, můžete pro tuto vlastnost vložit hodnoty citlivé na malá a velká písmena. Pokud máte například jedinečný klíč definovaný pro vlastnost name, "Gaby" se liší od "gaby" a můžete do kontejneru vložit obojí.

Pokud chcete vytvářet položky se stejnou e-mailovou adresou, ale ne se stejným křestním jménem, příjmením a e-mailovou adresou, přidejte další cesty k jedinečným zásadám klíče. Místo vytvoření jedinečného klíče jenom na základě e-mailové adresy můžete vytvořit jedinečný klíč s kombinací křestního jména, příjmení a e-mailové adresy. Tento klíč se označuje jako složený jedinečný klíč. V tomto případě je povolená každá jedinečná kombinace tří hodnot v daném případě CompanyID .

Kontejner může například obsahovat položky s následujícími hodnotami, kde každá položka respektuje omezení jedinečného klíče.

ID společnosti Křestní jméno Příjmení E-mailová adresa
Contoso Gaby Duperre gaby@contoso.com
Contoso Gaby Duperre gaby@fabrikam.com
Fabrikam Gaby Duperre gaby@fabrikam.com
Fabrikam Ivan Duperre gaby@fabrikam.com
Fabrkam Duperre gaby@fabraikam.com
Fabrkam gaby@fabraikam.com

Pokud se pokusíte vložit další položku s kombinacemi uvedenými v předchozí tabulce, zobrazí se chyba. Tato chyba značí, že nebylo splněno omezení jedinečného klíče. Obdržíte buď Resource with specified ID or name already exists zprávu, nebo Resource with specified ID, name, or unique index already exists jako návratovou zprávu.

Definování jedinečného klíče

Jedinečné klíče můžete definovat pouze při vytváření kontejneru Azure Cosmos DB. Jedinečný klíč je vymezený na logický oddíl. Pokud v předchozím příkladu rozdělíte kontejner na základě PSČ, můžete mít stejné položky v každém logickém oddílu. Při vytváření jedinečných klíčů zvažte následující vlastnosti:

  • Existující kontejner nelze aktualizovat tak, aby používal jiný jedinečný klíč. Jinými slovy, po vytvoření kontejneru s jedinečnými zásadami klíče není možné zásadu změnit.

  • Pokud chcete nastavit jedinečný klíč pro existující kontejner, vytvořte nový kontejner s omezením jedinečného klíče. Pomocí příslušného nástroje pro migraci dat přesuňte data z existujícího kontejneru do nového kontejneru. Pro kontejnery SQL použijte úlohy kopírování kontejneru k přesunu dat. Pro kontejnery MongoDB použijte k přesunu dat mongoimport.exe nebo mongorestore.exe .

  • Zásada jedinečného klíče může mít maximálně 16 hodnot cesty. Například hodnoty mohou být /firstName, /lastNamea /address/zipCode. Každá zásada jedinečného klíče může mít maximálně 10 omezení nebo kombinací jedinečných klíčů. V předchozím příkladu jsou křestní jméno, příjmení a e-mailová adresa společně jedním omezením. Toto omezení používá 3 z 16 možných cest.

  • Pokud má kontejner jedinečnou zásadu klíče, poplatky za vytvoření, aktualizaci a odstranění položky za jednotku žádosti jsou o něco vyšší.

  • Řídké jedinečné klíče nejsou podporovány. Pokud chybí některé jedinečné hodnoty cesty, považují se za hodnoty null, které se účastní omezení jedinečnosti. Z tohoto důvodu může existovat pouze jedna položka s hodnotou null, která vyhovuje tomuto omezení.

  • U jedinečných názvů klíčů se rozlišují malá a velká písmena. Představte si například kontejner s omezením jedinečného klíče nastaveným na /address/zipcode. Pokud data mají pole s názvem ZipCode, Azure Cosmos DB vloží jako jedinečný klíč hodnotu null, protože zipcode není stejná jako ZipCode. Z důvodu citlivosti tohoto případu nelze vložit všechny ostatní záznamy se zipCode, protože duplicitní hodnota null porušuje omezení jedinečného klíče.

Další kroky