Unieke sleutelbeperkingen in Azure Cosmos DB
VAN TOEPASSING OP: NoSQL
Unieke sleutels voegen een laag gegevensintegriteit toe aan een Azure Cosmos DB-container. U maakt een uniek sleutelbeleid wanneer u een Azure Cosmos DB-container maakt. Met unieke sleutels zorgt u ervoor dat een of meer waarden binnen een logische partitie uniek zijn. U kunt ook de uniekheid per partitiesleutel garanderen.
Nadat u een container met een uniek sleutelbeleid hebt gemaakt, wordt het maken van een nieuw item of een update van een bestaand item dat resulteert in een duplicaat binnen een logische partitie, voorkomen, zoals opgegeven door de unieke sleutelbeperking. De partitiesleutel gecombineerd met de unieke sleutel garandeert de uniekheid van een item binnen het bereik van de container.
Denk bijvoorbeeld aan een Azure Cosmos DB-container met Email address
als de unieke sleutelbeperking en CompanyID
als de partitiesleutel. Wanneer u het e-mailadres van de gebruiker configureert met een unieke sleutel, heeft elk item een uniek e-mailadres binnen een bepaald CompanyID
item. Er kunnen geen twee items worden gemaakt met dubbele e-mailadressen en met dezelfde partitiesleutelwaarde. In de API van Azure Cosmos DB voor NoSQL worden items opgeslagen als JSON-waarden. Deze JSON-waarden zijn hoofdlettergevoelig. Wanneer u een eigenschap als een unieke sleutel kiest, kunt u hoofdlettergevoelige waarden voor die eigenschap invoegen. Als u bijvoorbeeld een unieke sleutel hebt gedefinieerd voor de naameigenschap, verschilt 'Gaby' van 'gaby' en kunt u beide in de container invoegen.
Als u items met hetzelfde e-mailadres wilt maken, maar niet dezelfde voornaam, achternaam en e-mailadres, voegt u meer paden toe aan het unieke sleutelbeleid. In plaats van alleen een unieke sleutel te maken op basis van het e-mailadres, kunt u ook een unieke sleutel maken met een combinatie van de voornaam, achternaam en e-mailadres. Deze sleutel wordt een samengestelde unieke sleutel genoemd. In dit geval is elke unieke combinatie van de drie waarden binnen een gegeven CompanyID
toegestaan.
De container kan bijvoorbeeld items bevatten met de volgende waarden, waarbij elk item voldoet aan de unieke sleutelbeperking.
CompanyID | Voornaam | Achternaam | E-mailadres |
---|---|---|---|
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 |
Als u probeert een ander item in te voegen met de combinaties die in de vorige tabel worden vermeld, wordt er een foutbericht weergegeven. De fout geeft aan dat niet is voldaan aan de unieke sleutelbeperking. U ontvangt Resource with specified ID or name already exists
of Resource with specified ID, name, or unique index already exists
als een retourbericht.
Een unieke sleutel definiëren
U kunt alleen unieke sleutels definiëren wanneer u een Azure Cosmos DB-container maakt. Een unieke sleutel is gericht op een logische partitie. Als u in het vorige voorbeeld de container partitionert op basis van de postcode, kunt u dezelfde items in elke logische partitie hebben. Houd rekening met de volgende eigenschappen wanneer u unieke sleutels maakt:
U kunt een bestaande container niet bijwerken om een andere unieke sleutel te gebruiken. Met andere woorden, nadat een container is gemaakt met een uniek sleutelbeleid, kan het beleid niet worden gewijzigd.
Als u een unieke sleutel voor een bestaande container wilt instellen, maakt u een nieuwe container met de unieke sleutelbeperking. Gebruik het juiste hulpprogramma voor gegevensmigratie om de gegevens van de bestaande container naar de nieuwe container te verplaatsen. Voor SQL-containers gebruikt u de taken voor het kopiëren van containers om gegevens te verplaatsen. Gebruik voor MongoDB-containers mongoimport.exe of mongorestore.exe om gegevens te verplaatsen.
Een uniek sleutelbeleid kan maximaal 16 padwaarden bevatten. De waarden kunnen
/firstName
bijvoorbeeld ,/lastName
en/address/zipCode
. Elk beleid voor unieke sleutels kan maximaal 10 unieke sleutelbeperkingen of combinaties hebben. In het vorige voorbeeld zijn voornaam, achternaam en e-mailadres samen één beperking. Deze beperking maakt gebruik van 3 van de 16 mogelijke paden.Wanneer een container een uniek sleutelbeleid heeft, zijn de kosten voor aanvraageenheid (RU) voor het maken, bijwerken en verwijderen van een item iets hoger.
Sparse unieke sleutels worden niet ondersteund. Als sommige unieke padwaarden ontbreken, worden ze behandeld als null-waarden, die deelnemen aan de beperking voor uniekheid. Daarom kan er slechts één item met een null-waarde zijn om aan deze beperking te voldoen.
Unieke sleutelnamen zijn hoofdlettergevoelig. Denk bijvoorbeeld aan een container met de unieke sleutelbeperking ingesteld op
/address/zipcode
. Als uw gegevens een veld met de naamZipCode
hebben, voegt Azure Cosmos DB 'null' in als de unieke sleutel, omdatzipcode
deze niet hetzelfde is alsZipCode
. Vanwege deze hoofdlettergevoeligheid kunnen alle andere records met ZipCode niet worden ingevoegd omdat het dubbele null de unieke sleutelbeperking schendt.
Volgende stappen
- Meer informatie over logische partities
- Ontdek hoe u unieke sleutels definieert bij het maken van een container
- Wilt u capaciteitsplanning uitvoeren voor een migratie naar Azure Cosmos DB? U kunt informatie over uw bestaande databasecluster gebruiken voor capaciteitsplanning.
- Als alles wat u weet het aantal vcores en servers in uw bestaande databasecluster is, leest u meer over het schatten van aanvraageenheden met behulp van vCores of vCPU's
- Als u typische aanvraagtarieven voor uw huidige databaseworkload kent, leest u meer over het schatten van aanvraageenheden met behulp van azure Cosmos DB-capaciteitsplanner