Unika nyckelbegränsningar i Azure Cosmos DB

GÄLLER FÖR: NoSQL

Unika nycklar lägger till ett lager med dataintegritet i en Azure Cosmos DB-container. Du skapar en unik nyckelprincip när du skapar en Azure Cosmos DB-container. Med unika nycklar ser du till att ett eller flera värden i en logisk partition är unika. Du kan också garantera unikhet per partitionsnyckel.

När du har skapat en container med en unik nyckelprincip förhindras skapandet av en ny eller en uppdatering av ett befintligt objekt som resulterar i en dubblett inom en logisk partition enligt den unika nyckelbegränsningen. Partitionsnyckeln i kombination med den unika nyckeln garanterar att ett objekt är unikt inom containerns omfång.

Anta till exempel att en Azure Cosmos DB-container är Email address den unika nyckelbegränsningen och CompanyID partitionsnyckeln. När du konfigurerar användarens e-postadress med en unik nyckel har varje objekt en unik e-postadress inom en viss CompanyID. Två objekt kan inte skapas med duplicerade e-postadresser och med samma partitionsnyckelvärde. I Azure Cosmos DB:s API för NoSQL lagras objekt som JSON-värden. Dessa JSON-värden är skiftlägeskänsliga. När du väljer en egenskap som en unik nyckel kan du infoga skiftlägeskänsliga värden för den egenskapen. Om du till exempel har en unik nyckel som definierats för namnegenskapen skiljer sig "Gaby" från "gaby" och du kan infoga båda i containern.

Om du vill skapa objekt med samma e-postadress, men inte samma förnamn, efternamn och e-postadress, lägger du till fler sökvägar till den unika nyckelprincipen. I stället för att bara skapa en unik nyckel baserat på e-postadressen kan du skapa en unik nyckel med en kombination av förnamn, efternamn och e-postadress. Den här nyckeln kallas för en sammansatt unik nyckel. I det här fallet tillåts varje unik kombination av de tre värdena inom en given CompanyID .

Containern kan till exempel innehålla objekt med följande värden, där varje objekt uppfyller den unika nyckelbegränsningen.

CompanyID Förnamn Efternamn E-postadress
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

Om du försöker infoga ett annat objekt med de kombinationer som anges i föregående tabell får du ett fel. Felet anger att den unika nyckelbegränsningen inte uppfylldes. Du får antingen Resource with specified ID or name already exists eller Resource with specified ID, name, or unique index already exists som ett returmeddelande.

Definiera en unik nyckel

Du kan bara definiera unika nycklar när du skapar en Azure Cosmos DB-container. En unik nyckel är begränsad till en logisk partition. Om du partitionera containern baserat på postnummer i föregående exempel kan du ha samma objekt i varje logisk partition. Tänk på följande egenskaper när du skapar unika nycklar:

  • Du kan inte uppdatera en befintlig container för att använda en annan unik nyckel. När en container har skapats med en unik nyckelprincip kan principen med andra ord inte ändras.

  • Om du vill ange en unik nyckel för en befintlig container skapar du en ny container med den unika nyckelbegränsningen. Använd lämpligt datamigreringsverktyg för att flytta data från den befintliga containern till den nya containern. För SQL-containrar använder du containerkopieringsjobben för att flytta data. För MongoDB-containrar använder du mongoimport.exe eller mongorestore.exe för att flytta data.

  • En unik nyckelprincip kan ha högst 16 sökvägsvärden. Till exempel kan värdena vara /firstName, /lastNameoch /address/zipCode. Varje unik nyckelprincip kan ha högst 10 unika nyckelbegränsningar eller kombinationer. I föregående exempel är förnamn, efternamn och e-postadress tillsammans en begränsning. Den här begränsningen använder 3 av de 16 möjliga sökvägarna.

  • När en container har en unik nyckelprincip är ru-avgifterna (Request Unit) för att skapa, uppdatera och ta bort ett objekt något högre.

  • Glesa unika nycklar stöds inte. Om vissa unika sökvägsvärden saknas behandlas de som null-värden, som deltar i unikhetsbegränsningen. Därför kan det bara finnas ett enskilt objekt med ett null-värde för att uppfylla den här begränsningen.

  • Unika nyckelnamn är skiftlägeskänsliga. Överväg till exempel en container med den unika nyckelbegränsningen inställd på /address/zipcode. Om dina data har ett fält med namnet ZipCodeinfogar Azure Cosmos DB "null" som den unika nyckeln eftersom zipcode inte är samma som ZipCode. På grund av det här fallets känslighet kan inte alla andra poster med ZipCode infogas eftersom dubbletten "null" strider mot den unika nyckelbegränsningen.

Nästa steg