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 CompanyID
objektu . 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
,/lastName
a/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ázvemZipCode
, Azure Cosmos DB vloží jako jedinečný klíč hodnotu null, protožezipcode
není stejná jakoZipCode
. 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
- Další informace o logických oddílech
- Prozkoumání definování jedinečných klíčů při vytváření kontejneru
- Pokoušíte se naplánovat kapacitu migrace do služby Azure Cosmos DB? Informace o stávajícím databázovém clusteru můžete použít k plánování kapacity.
- Pokud víte, že je počet virtuálních jader a serverů ve vašem existujícím databázovém clusteru, přečtěte si o odhadu jednotek žádostí pomocí virtuálních jader nebo virtuálních procesorů.
- Pokud znáte typické sazby požadavků pro vaši aktuální úlohu databáze, přečtěte si informace o odhadu jednotek žádostí pomocí plánovače kapacity služby Azure Cosmos DB.