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 din arbetsbelastning 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 dig till exempel 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 realtidsscenarier 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 över 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.2 och så vidare, via 2018-08-09.400. Eftersom du randomiserar partitionsnyckeln fördelas 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

Strategin för slumpmässigt suffix kan avsevärt förbättra skrivgenomflödet, men det är svårt att läsa ett visst objekt. Du känner inte till suffixvärdet som användes när du skrev objektet. Om du vill göra det enklare att läsa enskilda objekt använder du strategin för förberäknade suffix. 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.

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 partitionsnyckeldatumet. 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 enda snabbpartitionsnyckel, dvs. en partitionsnyckel som tar all arbetsbelastning.

Nästa steg

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