Dela via


Anpassad partitionering i Azure Synapse Link för Azure Cosmos DB

GÄLLER FÖR: NoSQL MongoDB Gremlin

Med anpassad partitionering kan du partitionera analyslagringsdata på fält som ofta används som filter i analysfrågor, vilket ger bättre frågeprestanda.

I den här artikeln får du lära dig att partitionera dina data i Azure Cosmos DB-analysarkivet med hjälp av nycklar som är viktiga för dina analytiska arbetsbelastningar. Den förklarar också hur du kan dra nytta av den förbättrade frågeprestandan med partitionsrensning. Du får också lära dig hur anpassad partitionering förbättrar frågeprestanda när dina arbetsbelastningar har ett stort antal uppdateringar eller borttagningar.

Kommentar

Azure Cosmos DB-konton och -containrar bör ha Azure Synapse Link aktiverat för att dra nytta av anpassad partitionering.

Hur fungerar det?

Partitioneringen av analysarkivet är oberoende av partitionering i transaktionsarkivet. Som standard partitioneras inte analysarkivet. Om du vill köra frågor mot analysarkivet ofta baserat på fält som Datum, Tid, Kategori osv. kan du använda anpassad partitionering för att skapa ett separat partitionerat arkiv baserat på dessa nycklar. Du kan välja ett enda fält eller en kombination av fält från datauppsättningen som partitionsnyckel för analysarkivet.

Du kan utlösa partitionering från en Azure Synapse Spark-notebook-fil med hjälp av Azure Synapse Link. Du kan schemalägga att det ska köras som ett bakgrundsjobb, en eller två gånger om dagen, men kan köras oftare om det behövs.

Kommentar

Det partitionerade arkivet pekar på det primära ADLS Gen2-lagringskontot som är länkat till Azure Synapse-arbetsytan.

Arkitektur för partitionerat lager i Azure Synapse Link för Azure Cosmos DB

Det partitionerade arkivet innehåller Azure Cosmos DB-analysdata tills den senaste tidsstämpeln du körde partitioneringsjobbet. När du kör frågor mot analysdata med hjälp av partitionsnyckelfiltren sammanfogar Synapse Link automatiskt partitionerade lagringsdata med de senaste ändringarna i analysarkivet. På så sätt får du de senaste resultaten för dina frågor. Även om det sammanfogar data innan du frågar skrivs inte delta tillbaka till det partitionerade arkivet. När deltat mellan data i analysarkivet och partitionerat lager ökar kan frågetiderna för partitionerade data variera. Om du utlöser partitioneringsjobb oftare minskar det här deltat. Varje gång du kör partitionsjobbet bearbetas endast inkrementella ändringar i analysarkivet i stället för den fullständiga datauppsättningen.

När ska jag använda?

Det är valfritt att använda partitionerat arkiv när du frågar efter analysdata i Azure Cosmos DB. Du kan köra frågor mot samma data direkt med Hjälp av Synapse Link med det befintliga analysarkivet. Du kanske vill aktivera partitionerat arkiv om du har följande krav:

  • Vanliga analysfrågefilter som kan användas som partitionskolumner
  • Partitionskolumner med låg kardinalitet
  • Partitionskolumnen distribuerar data lika mellan partitioner
  • Hög mängd uppdaterings- eller borttagningsåtgärder
  • Långsam datainmatning

Om du kör frågor mot livedata med hjälp av frågefilter som skiljer sig från partitionsnycklar rekommenderar vi att du kör frågor mot analysarkivet direkt.

Förmåner

Minskad datagenomsökning från partitionsrensning

Eftersom data som motsvarar varje unik partitionsnyckel samplaceras i det partitionerade arkivet kan frågekörningarna rensa underliggande data och genomsöka endast nödvändiga data när du använder partitionsnyckeln som ett frågefilter. Genom att genomsöka begränsade data förbättrar partitionsrensning prestandan för analytiska frågor.

Flexibilitet att partitionera dina analysdata

Du kan ha flera partitioneringsstrategier för en viss container för analysarkiv. Du kan använda sammansatta eller separata partitionsnycklar baserat på dina frågekrav.

Prestandaförbättringar för frågor

Förutom frågeförbättringarna från partitionsrensning resulterar anpassad partitionering också i bättre frågeprestanda för följande arbetsbelastningar:

  • Uppdatera/ta bort tunga arbetsbelastningar – I stället för att hålla reda på flera versioner av poster i analysarkivet och läsa in dem under varje frågekörning, innehåller det partitionerade arkivet bara den senaste versionen av data. Den här funktionen förbättrar frågeprestanda avsevärt när du har hög arbetsbelastning för uppdatering/borttagning.

  • Långsamma datainmatningsarbetsbelastningar – Partitionering komprimerar analysdata, så om din arbetsbelastning har långsam datainmatning kan den här komprimeringen resultera i bättre frågeprestanda

Transaktionsgaranti

Observera att anpassad partitionering garanterar fullständig transaktionsgaranti. Frågesökvägen blockeras inte när partitioneringskörningen pågår. Varje frågekörning läser partitionerade data från den senaste lyckade partitioneringen. Den läser de senaste data från analysarkivet, vilket ser till att frågor alltid returnerar de senaste tillgängliga data när du använder det partitionerade arkivet.

Säkerhet

Om du har konfigurerat hanterade privata slutpunkter för analysarkivet rekommenderar vi att du även lägger till hanterade privata slutpunkter för det partitionerade arkivet. Det partitionerade arkivet är ett primärt lagringskonto som är associerat med din Synapse-arbetsyta.

Om du konfigurerade kundhanterade nycklar i analysarkivet måste du också aktivera dem direkt på det primära lagringskontot för Synapse-arbetsytan, som också är det partitionerade arkivet.

Partitioneringsstrategier

Du kan använda en eller flera partitionsnycklar för dina analysdata. Om du använder flera partitionsnycklar finns här några rekommendationer om hur du partitionerade data:

  • Använda sammansatta nycklar:

    Anta att du ofta vill fråga baserat på Key1 och Key2.

    Till exempel "Fråga efter alla poster där ReadDate = '2021-10-08' och Location = 'Sydney'".

    I det här fallet är det effektivare att använda sammansatta nycklar för att leta upp alla poster som matchar ReadDate och de poster som matchar Plats inom readDate.

    Exempel på konfigurationsalternativ:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Nu kan du fråga baserat på filtret "Plats":

    • Du kanske vill fråga analysarkivet direkt. Partitionerat arkiv genomsöker alla poster efter ReadDate först och sedan efter Plats. Beroende på din arbetsbelastning och kardinalitet för dina analysdata kan du därför få bättre resultat genom att fråga analysarkivet direkt.
    • Du kan också köra ett annat partitionsjobb för att även partitioneras baserat på "Plats" i samma partitionerade arkiv.
  • Använda flera nycklar separat:

    Anta att du ofta vill fråga ibland baserat på "ReadDate" och andra gånger, baserat på "Plats".

    Exempel:

    • Fråga efter alla poster där ReadDate = '2021-10-08'
    • Fråga efter alla poster där Location = 'Sydney'

    Kör två partitionsjobb med partitionsnycklar enligt definitionen nedan för det här scenariot:

    Jobb 1:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Jobb 2:

    .option("spark.cosmos.asns.partition.keys", "Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Observera att det inte är effektivt att nu ofta fråga baserat på filteren "ReadDate" och "Location" tillsammans, på ovanstående partitionering. Sammansatta nycklar ger bättre frågeprestanda i så fall.

Begränsningar

  • Anpassad partitionering är endast tillgänglig för Azure Synapse Spark. Anpassad partitionering stöds för närvarande inte för serverlösa SQL-pooler.

  • För närvarande kan partitionerat arkiv bara peka på det primära lagringskontot som är associerat med Synapse-arbetsytan. Det går inte att välja anpassade lagringskonton just nu.

  • Anpassad partitionering är endast tillgängligt för API för NoSQL i Azure Cosmos DB. API för MongoDB, Gremlin och Cassandra är i förhandsversion just nu.

Prissättning

Utöver prissättningen för Azure Synapse Link debiteras du följande avgifter när du använder anpassad partitionering:

  • Du debiteras för användning av Synapse Apache Spark-pooler när du kör partitioneringsjobb i analysarkivet.

  • Partitionerade data lagras i det primära Azure Data Lake Storage Gen2-kontot som är associerat med din Azure Synapse Analytics-arbetsyta. Du debiteras de kostnader som är kopplade till användning av ADLS Gen2-lagring och transaktioner. Dessa kostnader bestäms av den lagring som krävs av partitionerade analysdata och data som bearbetas för analysfrågor i Synapse. Mer information om priser finns på sidan med priser för Azure Data Lake Storage.

Vanliga frågor och svar

Hur ofta ska jag köra det anpassade partitioneringsjobbet?

Det finns flera faktorer, till exempel inkrementell datavolym, krav på frågesvarstid osv. som avgör hur ofta du kan köra det anpassade partitioneringsjobbet. Det kan köras en gång om dagen eller en gång med några timmars mellanrum. Du kanske vill schemalägga partitioneringsjobbet oftare om inkommande datavolym är hög och den förväntade frågesvarstiden är låg. Du måste också först ackumulera inkrementella data i analysarkivet för att partitionsrensningen ska vara effektiv.

Innehåller frågeresultaten senaste data medan partitioneringsjobbkörningen pågår?

Ja, anpassad partitionering ger en fullständig transaktionsgaranti. Därför kombinerar frågeresultaten när som helst befintliga partitionerade data med de tail-data som returnerar den senaste datauppsättningen för analysarkivet.

Kan den anpassade partitioneringen använda länkad tjänstautentisering i Azure Synapse Analytics?

Ja, länkad tjänstautentisering kan användas för partitionering av analysarkiv.

Kan jag ändra partitionsnyckeln för en viss container vid en senare tidpunkt?

Ja, partitionsnyckeln för den angivna containern kan ändras och den nya partitionsnyckeldefinitionen skapar ett nytt partitionerat arkiv.

Kommentar

Partitionsnyckeldefinitionen är en del av den partitionerade lagringssökvägen.

Kan olika partitionsnycklar peka på samma BasePath?

Ja, du kan ange flera partitionsnycklar i samma partitionerade arkiv som nedan:

.option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \

Nästa steg

Mer information finns i följande dokument: