Dela via


Skapa en syntetisk partitionsnyckel

GÄLLER FÖR: NoSQL

Det är bästa praxis att ha en partitionsnyckel med många distinkta värden, till exempel hundratals eller tusentals. Målet är att distribuera dina data och arbetsbelastningar jämnt över de objekt som är associerade med dessa partitionsnyckelvärden. Om en sådan egenskap inte finns i dina data kan du skapa en syntetisk partitionsnyckel. Det här dokumentet beskriver flera grundläggande tekniker för att generera en syntetisk partitionsnyckel för din Azure Cosmos DB-container.

Sammanfoga flera egenskaper för ett objekt

Du kan skapa en partitionsnyckel genom att sammanfoga flera egenskapsvärden till en enda artificiell partitionKey egenskap. Dessa nycklar kallas syntetiska nycklar. Tänk till exempel på följande exempeldokument:

{
"deviceId": "abc-123",
"date": 2018
}

För föregående dokument är ett alternativ att ange /deviceId eller /date som partitionsnyckel. Använd det här alternativet om du vill partitionera containern baserat på antingen enhets-ID eller datum. Ett annat alternativ är att sammanfoga dessa två värden till en syntetisk partitionKey egenskap som används som partitionsnyckel.

{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}

I verkliga scenarier kan du ha tusentals objekt i en databas. I stället för att lägga till den syntetiska nyckeln manuellt definierar du logik på klientsidan för att sammanfoga värden och infoga den syntetiska nyckeln i objekten i dina Azure Cosmos DB-containrar.

Använda en partitionsnyckel med ett slumpmässigt suffix

En annan möjlig strategi för att fördela arbetsbelastningen jämnare är att lägga till ett slumptal i slutet av partitionsnyckelvärdet. När du distribuerar objekt på det här sättet kan du utföra parallella skrivåtgärder mellan partitioner.

Ett exempel är om en partitionsnyckel representerar ett datum. Du kan välja ett slumptal mellan 1 och 400 och sammanfoga det som ett suffix till datumet. Den här metoden resulterar i partitionsnyckelvärden som 2018-08-09.1,2018-08-09.2och så vidare via 2018-08-09.400. Eftersom du randomiserar partitionsnyckeln sprids skrivåtgärderna på containern varje dag jämnt över flera partitioner. Den här metoden resulterar i bättre parallellitet och övergripande högre dataflöde.

Använda en partitionsnyckel med förberäknade suffix

Den slumpmässiga suffixstrategin kan avsevärt förbättra skrivdataflödet, men det är svårt att läsa ett specifikt objekt. Du vet inte värdet för suffixet som användes när du skrev objektet. Om du vill göra det enklare att läsa enskilda objekt använder du den förberäknade suffixstrategin. I stället för att använda ett slumptal för att distribuera objekten mellan partitionerna använder du ett tal som beräknas baserat på något som du vill fråga efter.

Tänk på föregående exempel, där en container använder ett datum som partitionsnyckel. Anta nu att varje objekt har ett Vehicle-Identification-Number (VIN) attribut som vi vill komma åt. Anta dessutom att du ofta kör frågor för att hitta objekt efter VIN, utöver datum. Innan programmet skriver objektet till containern kan det beräkna ett hash-suffix baserat på VIN och lägga till det i partitionsnyckelns datum. Beräkningen kan generera ett tal mellan 1 och 400 som är jämnt fördelat. Det här resultatet liknar de resultat som genereras av metoden för strategi för slumpmässigt suffix. Partitionsnyckelvärdet är sedan det datum som sammanfogas med det beräknade resultatet.

Med den här strategin är skrivningarna jämnt fördelade över partitionsnyckelvärdena och mellan partitionerna. Du kan enkelt läsa ett visst objekt och datum eftersom du kan beräkna partitionsnyckelvärdet för en specifik Vehicle-Identification-Number. Fördelen med den här metoden är att du kan undvika att skapa en enskild frekvent partitionsnyckel, dvs. en partitionsnyckel som tar all arbetsbelastning.

Nästa steg

Du kan lära dig mer om partitioneringskonceptet i följande artiklar: