Aangepaste partitionering in Azure Synapse Link voor Azure Cosmos DB

VAN TOEPASSING OP: Nosql MongoDB Gremlin

Met aangepaste partitionering kunt u analytische opslaggegevens partitioneren op velden die vaak worden gebruikt als filters in analytische query's, wat resulteert in verbeterde queryprestaties.

In dit artikel leert u hoe u uw gegevens partitioneert in de analytische opslag van Azure Cosmos DB met behulp van sleutels die essentieel zijn voor uw analytische workloads. Ook wordt uitgelegd hoe u kunt profiteren van de verbeterde queryprestaties met het verwijderen van partities. U leert ook hoe aangepaste partitionering de prestaties van query's verbetert wanneer uw workloads een aanzienlijk aantal updates of verwijderingen hebben.

Notitie

Voor Azure Cosmos DB-accounts en -containers moet Azure Synapse Link zijn ingeschakeld om te kunnen profiteren van aangepaste partitionering.

Hoe werkt het?

Partitionering van analytische opslag is onafhankelijk van partitionering in het transactionele archief. Analytische opslag is standaard niet gepartitioneerd. Als u regelmatig een query wilt uitvoeren op analytische opslag op basis van velden zoals Datum, Tijd, Categorie, enzovoort, kunt u aangepaste partitionering gebruiken om een afzonderlijk gepartitioneerd archief te maken op basis van deze sleutels. U kunt één veld of een combinatie van velden uit uw gegevensset kiezen als de partitiesleutel voor analytische opslag.

U kunt partitionering activeren vanuit een Azure Synapse Spark-notebook met behulp van Azure Synapse Link. U kunt plannen dat deze wordt uitgevoerd als een achtergrondtaak, één of twee keer per dag, maar indien nodig vaker kan worden uitgevoerd.

Notitie

Het gepartitioneerde archief verwijst naar het primaire ADLS Gen2-opslagaccount dat is gekoppeld aan de Azure Synapse-werkruimte.

Architecture of partitioned store in Azure Synapse Link for Azure Cosmos DB

Het gepartitioneerde archief bevat analytische gegevens van Azure Cosmos DB tot het laatste tijdstempel dat u uw partitioneringstaak hebt uitgevoerd. Wanneer u analytische gegevens opvraagt met behulp van de partitiesleutelfilters, worden in Synapse Link automatisch gepartitioneerde opslaggegevens samengevoegd met de meest recente wijzigingen in de analytische opslag. Op deze manier krijgt u de meest recente resultaten voor uw query's. Hoewel de gegevens worden samengevoegd voordat er query's worden uitgevoerd, wordt de delta niet teruggeschreven naar het gepartitioneerde archief. Aangezien de verschillen tussen gegevens in analytische opslag en gepartitioneerde opslag breder worden, kunnen de querytijden voor gepartitioneerde gegevens variëren. Het activeren van partitioneringstaak vermindert deze delta vaker. Telkens wanneer u de partitietaak uitvoert, worden alleen incrementele wijzigingen in de analytische opslag verwerkt in plaats van de volledige gegevensset.

Wanneer te gebruiken?

Het gebruik van een gepartitioneerd archief is optioneel bij het uitvoeren van query's op analytische gegevens in Azure Cosmos DB. U kunt rechtstreeks query's uitvoeren op dezelfde gegevens met behulp van Synapse Link met de bestaande analytische opslag. U kunt gepartitioneerde opslag inschakelen als u de volgende vereisten hebt:

  • Algemene analytische queryfilters die kunnen worden gebruikt als partitiekolommen
  • Kolommen met lage kardinaliteitspartitie
  • Partitiekolom distribueert gegevens gelijkmatig over partities
  • Groot aantal update- of verwijderbewerkingen
  • Trage gegevensopname

Als u query's uitvoert op livegegevens met behulp van queryfilters die afwijken van partitiesleutels, raden we u aan om rechtstreeks een query uit te voeren op analytische opslag.

Vergoedingen

Minder gegevensscans van partitiesnoeien

Omdat de gegevens die overeenkomen met elke unieke partitiesleutel zich in het gepartitioneerde archief bevinden, kunnen de queryuitvoeringen de onderliggende gegevens verwijderen en alleen de vereiste gegevens scannen wanneer u de partitiesleutel als queryfilter gebruikt. Door beperkte gegevens te scannen, verbetert partitionering de prestaties van analytische query's.

Flexibiliteit om uw analytische gegevens te partitioneren

U kunt meerdere partitioneringsstrategieën hebben voor een bepaalde analytische opslagcontainer. U kunt samengestelde of afzonderlijke partitiesleutels gebruiken op basis van uw queryvereisten.

Verbeteringen in queryprestaties

Naast de queryverbeteringen van het verwijderen van partities, resulteert aangepast partitioneren ook in verbeterde queryprestaties voor de volgende werkbelastingen:

  • Zware werkbelastingen bijwerken/verwijderen: in plaats van meerdere versies van records in de analytische opslag bij te houden en te laden tijdens elke queryuitvoering, bevat het gepartitioneerde archief alleen de nieuwste versie van de gegevens. Deze mogelijkheid verbetert de queryprestaties aanzienlijk wanneer u zware werkbelastingen bijwerkt/verwijdert.

  • Trage werkbelastingen voor gegevensopname: bij partitionering worden analytische gegevens gecomprimeerd. Als uw workload trage gegevensopname heeft, kan deze compressie leiden tot betere queryprestaties

Transactionele garantie

Het is belangrijk te weten dat aangepaste partitionering zorgt voor een volledige transactionele garantie. Het querypad wordt niet geblokkeerd terwijl de partitionering wordt uitgevoerd. Elke query-uitvoering leest de gepartitioneerde gegevens van de laatste geslaagde partitionering. Hiermee worden de meest recente gegevens uit de analytische opslag gelezen, zodat query's altijd de meest recente gegevens retourneren die beschikbaar zijn bij het gebruik van het gepartitioneerde archief.

Beveiliging

Als u beheerde privé-eindpunten voor uw analytische opslag hebt geconfigureerd, wordt u aangeraden ook beheerde privé-eindpunten toe te voegen voor het gepartitioneerde archief. Het gepartitioneerde archief is een primair opslagaccount dat is gekoppeld aan uw Synapse-werkruimte.

Als u door de klant beheerde sleutels voor analytische opslag hebt geconfigureerd, moet u deze ook rechtstreeks inschakelen in het primaire opslagaccount van de Synapse-werkruimte, het gepartitioneerde archief.

Strategieën voor partitioneren

U kunt een of meer partitiesleutels gebruiken voor uw analytische gegevens. Als u meerdere partitiesleutels gebruikt, volgen hier enkele aanbevelingen voor het partitioneren van de gegevens:

  • Samengestelde sleutels gebruiken:

    Stel dat u regelmatig een query wilt uitvoeren op basis van Key1 en Key2.

    Bijvoorbeeld 'Query uitvoeren voor alle records waarbij ReadDate = '2021-10-08' en Location = 'Sydney' is.

    In dit geval zijn het gebruik van samengestelde sleutels efficiënter om alle records op te zoeken die overeenkomen met de ReadDate en de records die overeenkomen met Locatie binnen die ReadDate.

    Voorbeeldconfiguratieopties:

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

    U kunt nu query's uitvoeren op basis van het filter Locatie:

    • Mogelijk wilt u rechtstreeks een query uitvoeren op analytische opslag. Het gepartitioneerde archief scant eerst alle records op ReadDate en vervolgens op Locatie. Afhankelijk van uw workload en kardinaliteit van uw analytische gegevens, krijgt u mogelijk betere resultaten door rechtstreeks een query uit te voeren op analytische opslag.
    • U kunt ook een andere partitietaak uitvoeren om ook te partitioneren op basis van Locatie in hetzelfde gepartitioneerde archief.
  • Meerdere sleutels afzonderlijk gebruiken:

    Stel, u wilt vaak query's uitvoeren op basis van 'ReadDate' en andere tijden, op basis van 'Locatie'.

    Bijvoorbeeld:

    • Query uitvoeren voor alle records waarbij ReadDate = '2021-10-08'
    • Query's uitvoeren op alle records waarbij Location = 'Sydney'

    Voer twee partitietaken uit met partitiesleutels, zoals hieronder is gedefinieerd voor dit scenario:

    Taak 1:

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

    Taak 2:

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

    Houd er rekening mee dat het niet efficiënt is om nu regelmatig query's uit te voeren op basis van de filters ReadDate en Locatie, op basis van bovenstaande partitionering. Samengestelde sleutels bieden in dat geval betere queryprestaties.

Beperkingen

  • Aangepaste partitionering is alleen beschikbaar voor Azure Synapse Spark. Aangepaste partitionering wordt momenteel niet ondersteund voor serverloze SQL-pools.

  • Momenteel kan een gepartitioneerd archief alleen verwijzen naar het primaire opslagaccount dat is gekoppeld aan de Synapse-werkruimte. Het selecteren van aangepaste opslagaccounts wordt momenteel niet ondersteund.

  • Aangepaste partitionering is alleen beschikbaar voor API voor NoSQL in Azure Cosmos DB. DE API voor MongoDB, Gremlin en Cassandra zijn momenteel in preview.

Prijzen

Naast de prijzen van Azure Synapse Link worden de volgende kosten in rekening gebracht bij het gebruik van aangepaste partitionering:

  • U wordt gefactureerd voor het gebruik van Synapse Apache Spark-pools wanneer u partitioneringstaken uitvoert in de analytische opslag.

  • De gepartitioneerde gegevens worden opgeslagen in het primaire Azure Data Lake Storage Gen2-account dat is gekoppeld aan uw Azure Synapse Analytics-werkruimte. U betaalt de kosten die zijn gekoppeld aan het gebruik van de ADLS Gen2-opslag en -transacties. Deze kosten worden bepaald door de opslag die nodig is voor gepartitioneerde analytische gegevens en gegevens die worden verwerkt voor analytische query's in Synapse. Ga naar de pagina met prijzen van Azure Data Lake Storage voor meer informatie over prijzen.

Veelgestelde vragen

Hoe vaak moet ik de aangepaste partitioneringstaak uitvoeren?

Er zijn verschillende factoren, zoals incrementeel gegevensvolume, vereisten voor querylatentie, enzovoort, die bepalen hoe vaak u de aangepaste partitioneringstaak kunt uitvoeren. Het kan één keer per dag of eenmaal in elke paar uur worden uitgevoerd. U kunt de partitioneringstaak vaker plannen als het binnenkomende gegevensvolume hoog is en de verwachte querylatentie laag is. U moet ook eerst incrementele gegevens verzamelen in de analytische opslag om de partitie te verwijderen.

Bevatten de queryresultaten de meest recente gegevens terwijl de uitvoering van de partitioneringstaak wordt uitgevoerd?

Ja, aangepaste partitionering biedt een volledige transactionele garantie. De queryresultaten worden dus op elk moment gecombineerd met de bestaande gepartitioneerde gegevens met de staartgegevens die de meest recente gegevensset voor analytische opslag retourneren.

Kan de aangepaste partitionering gebruikmaken van gekoppelde serviceverificatie in Azure Synapse Analytics?

Ja, verificatie van gekoppelde services kan worden gebruikt voor partitionering van analytische opslag.

Kan ik de partitiesleutel voor een bepaalde container op een later tijdstip wijzigen?

Ja, de partitiesleutel voor de opgegeven container kan worden gewijzigd en de definitie van de nieuwe partitiesleutel maakt een nieuw gepartitioneerd archief.

Notitie

De definitie van de partitiesleutel maakt deel uit van het gepartitioneerde archiefpad.

Kunnen verschillende partitiesleutels verwijzen naar hetzelfde BasePath?

Ja, u kunt meerdere partitiesleutels opgeven in hetzelfde gepartitioneerde archief als hieronder:

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

Volgende stappen

Zie de volgende documenten voor meer informatie: