Inleiding tot ingerichte doorvoer in Azure Cosmos DB

VAN TOEPASSING OP: SQL API Cassandra-API Gremlin-API Table-API Azure Cosmos DB-API voor MongoDB

Met Azure Cosmos DB kunt u ingerichte doorvoer instellen voor uw databases en containers. Er zijn twee typen ingerichte doorvoer, standaard (handmatig) of automatisch schalen. In dit artikel vindt u een overzicht van de werking van ingerichte doorvoer.

Een Azure Cosmos-database is een beheereenheid voor een set containers. Een database bestaat uit een set schema-agnostische containers. Een Azure Cosmos-container is de eenheid van schaalbaarheid voor zowel de doorvoer als de opslag. Een container is horizontaal gepartitioneerd over een set machines binnen een Azure-regio, en wordt gedistribueerd in alle Azure-regio's die zijn gekoppeld aan uw Azure Cosmos-account.

Met Azure Cosmos DB kunt u doorvoer inrichten op twee granulariteiten:

  • Azure Cosmos-containers
  • Azure Cosmos-databases

Doorvoer instellen op een container

De doorvoer die is ingericht in een Azure Cosmos-container, is exclusief gereserveerd voor die container. De container ontvangt de ingerichte doorvoer altijd. De ingerichte doorvoer voor een container wordt financieel ondersteund door SLA's. Zie Doorvoer inrichten in een Azure Cosmos-container voor meer informatie over het configureren van standaarddoorvoer (handmatig) voor een container. Zie Doorvoer voor automatische schaalaanpassing inrichten voor meer informatie over het configureren van doorvoer voor automatische schaalaanpassing in een container.

Het instellen van ingerichte doorvoer voor een container is de meest gebruikte optie. U kunt de doorvoer voor een container elastisch schalen door elke hoeveelheid doorvoer in te richten met behulp van aanvraageenheden (RU's).

De doorvoer die is ingericht voor een container wordt gelijkmatig verdeeld over de fysieke partities en ervan uitgaande dat er een goede partitiesleutel wordt gebruikt waarmee de logische partities gelijkmatig worden verdeeld over de fysieke partities, wordt de doorvoer ook gelijkmatig verdeeld over alle logische partities van de container. U kunt de doorvoer voor logische partities niet selectief opgeven. Omdat een of meer logische partities van een container worden gehost door een fysieke partitie, behoren de fysieke partities uitsluitend tot de container en ondersteunen ze de doorvoer die op de container is ingericht.

Als de workload die wordt uitgevoerd op een logische partitie meer verbruikt dan de doorvoer die is toegewezen aan de onderliggende fysieke partitie, is het mogelijk dat uw bewerkingen een snelheidsbeperking hebben. Wat een dynamische partitie wordt genoemd, treedt op wanneer een logische partitie onevenredig meer aanvragen heeft dan andere partitiesleutelwaarden.

Wanneer snelheidsbeperking optreedt, kunt u de ingerichte doorvoer voor de hele container verhogen of de bewerkingen opnieuw uitvoeren. U moet er ook voor zorgen dat u een partitiesleutel kiest die opslag gelijkmatig distribueert en het aanvraagvolume distribueert. Zie Partitioneren en horizontaal schalen in Azure Cosmos DB voor meer informatie over partitioneren.

U wordt aangeraden de doorvoer bij de containergranulariteit te configureren wanneer u voorspelbare prestaties voor de container wilt.

In de volgende afbeelding ziet u hoe een fysieke partitie als host fungeert voor een of meer logische partities van een container:

Physical partition that hosts one or more logical partitions of a container

Doorvoer instellen voor een database

Wanneer u doorvoer inricht in een Azure Cosmos-database, wordt de doorvoer gedeeld over alle containers (gedeelde databasecontainers genoemd) in de database. Een uitzondering hierop is als u ingerichte doorvoer hebt opgegeven voor specifieke containers in de database. Het delen van de ingerichte doorvoer op databaseniveau tussen de containers is vergelijkbaar met het hosten van een database op een cluster van computers. Omdat alle containers in een database de resources delen die beschikbaar zijn op een computer, krijgt u natuurlijk geen voorspelbare prestaties voor een specifieke container. Zie Ingerichte doorvoer configureren in een Azure Cosmos-database voor meer informatie over het configureren van ingerichte doorvoer in een database. Zie Doorvoer voor automatische schaalaanpassing inrichten voor meer informatie over het configureren van doorvoer voor automatische schaalaanpassing in een database.

Omdat alle containers in de database de ingerichte doorvoer delen, biedt Azure Cosmos DB geen voorspelbare doorvoergaranties voor een bepaalde container in die database. Het gedeelte van de doorvoer dat een specifieke container kan ontvangen, is afhankelijk van:

  • Het aantal containers.
  • De keuze van partitiesleutels voor verschillende containers.
  • De verdeling van de workload over verschillende logische partities van de containers.

U wordt aangeraden de doorvoer in een database te configureren wanneer u de doorvoer wilt delen in meerdere containers, maar de doorvoer niet wilt toewijzen aan een bepaalde container.

In de volgende voorbeelden ziet u waar de voorkeur wordt gegeven aan het inrichten van doorvoer op databaseniveau:

  • Het delen van de ingerichte doorvoer van een database in een set containers is handig voor een toepassing met meerdere tenants. Elke gebruiker kan worden vertegenwoordigd door een afzonderlijke Azure Cosmos-container.

  • Het delen van de ingerichte doorvoer van een database in een set containers is handig wanneer u een NoSQL-database, zoals MongoDB of Cassandra, migreert op een cluster met VM's of van on-premises fysieke servers naar Azure Cosmos DB. Denk aan de ingerichte doorvoer die is geconfigureerd in uw Azure Cosmos-database als een logisch equivalent, maar rendabeler en elastischer, met die van de rekencapaciteit van uw MongoDB- of Cassandra-cluster.

Alle containers die in een database met ingerichte doorvoer zijn gemaakt, moeten worden gemaakt met een partitiesleutel. Op een bepaald moment wordt de doorvoer die is toegewezen aan een container binnen een database verdeeld over alle logische partities van die container. Wanneer u containers hebt die ingerichte doorvoer hebben geconfigureerd voor een database, kunt u de doorvoer niet selectief toepassen op een specifieke container of een logische partitie.

Als de workload op een logische partitie meer verbruikt dan de doorvoer die is toegewezen aan een specifieke logische partitie, zijn uw bewerkingen beperkt. Wanneer snelheidsbeperking optreedt, kunt u de doorvoer voor de hele database verhogen of de bewerkingen opnieuw uitvoeren. Zie Logische partities voor meer informatie over partitioneren.

Containers in een gedeelde doorvoerdatabase delen de doorvoer (RU/s) die zijn toegewezen aan deze database. Met standaard (handmatig) ingerichte doorvoer kunt u maximaal 25 containers hebben met minimaal 400 RU/s in de database. Met ingerichte doorvoer voor automatische schaalaanpassing kunt u maximaal 25 containers in een database hebben met minimaal 1000 RU/s (schalen tussen 100 - 1000 RU/s).

Notitie

In februari 2020 is een wijziging geïntroduceerd waarmee u maximaal 25 containers in een gedeelde doorvoerdatabase kunt hebben, waardoor het delen van de doorvoer voor de containers eenvoudiger wordt. Na de eerste 25 containers kunt u alleen meer containers aan de database toevoegen als ze zijn ingericht met toegewezen doorvoer, die gescheiden is van de gedeelde doorvoer van de database.
Als uw Azure Cosmos DB-account al een gedeelde doorvoerdatabase >met =25 containers bevat, worden het account en alle andere accounts in hetzelfde Azure-abonnement uitgesloten van deze wijziging. Neem contact op met productondersteuning als u feedback of vragen hebt.

Als uw workloads betrekking hebben op het verwijderen en opnieuw maken van alle verzamelingen in een database, wordt u aangeraden de lege database te verwijderen en opnieuw te maken voordat u de verzameling maakt. In de volgende afbeelding ziet u hoe een fysieke partitie een of meer logische partities kan hosten die deel uitmaken van verschillende containers in een database:

Physical partition that hosts one or more logical partitions that belong to different containers

Doorvoer instellen voor een database en een container

U kunt de twee modellen combineren. Doorvoer inrichten voor zowel de database als de container is toegestaan. In het volgende voorbeeld ziet u hoe u standaard (handmatig) ingerichte doorvoer inricht in een Azure Cosmos-database en een container:

  • U kunt een Azure Cosmos-database met de naam Z maken met standaard (handmatig) ingerichte doorvoer van 'K' -RU's.

  • Maak vervolgens vijf containers met de naam A, B, C, D en E in de database. Zorg ervoor dat u bij het maken van container B toegewezen doorvoer inschakelen voor deze containeroptie en expliciet P-RU's configureert van ingerichte doorvoer voor deze container. U kunt gedeelde en toegewezen doorvoer alleen configureren bij het maken van de database en container.

    Setting the throughput at the container-level

  • De doorvoer van 'K' RU's wordt gedeeld tussen de vier containers A, C, D en E. De exacte hoeveelheid doorvoer die beschikbaar is voor A, C, D of E varieert. Er zijn geen SLA's voor de doorvoer van elke afzonderlijke container.

  • De container met de naam B krijgt gegarandeerd de doorvoer van P-RU's altijd. Het wordt ondersteund door SLA's.

Notitie

Een container met ingerichte doorvoer kan niet worden geconverteerd naar een gedeelde databasecontainer. Omgekeerd kan een gedeelde databasecontainer niet worden geconverteerd naar een toegewezen doorvoer.

Doorvoer bijwerken in een database of container

Nadat u een Azure Cosmos-container of een database hebt gemaakt, kunt u de ingerichte doorvoer bijwerken. Er is geen limiet voor de maximale ingerichte doorvoer die u kunt configureren voor de database of de container.

Huidige ingerichte doorvoer

U kunt de ingerichte doorvoer van een container of database ophalen in de Azure Portal of met behulp van de SDK's:

Het antwoord van deze methoden bevat ook de minimale ingerichte doorvoer voor de container of database:

De werkelijke minimale RU/s kunnen variëren, afhankelijk van uw accountconfiguratie. Maar over het algemeen is dit het maximum van:

  • 400 RU/s
  • Huidige opslag in GB * 10 RU/s (deze beperking kan in sommige gevallen worden versoepeld, zie ons programma voor hoge opslag/ lage doorvoer)
  • Hoogste RU/s ooit ingericht voor de database of container / 100

De ingerichte doorvoer wijzigen

U kunt de ingerichte doorvoer van een container of database schalen via de Azure Portal of met behulp van de SDK's:

Als u de ingerichte doorvoer verlaagt, kunt u dit tot het minimum doen.

Als u de ingerichte doorvoer verhoogt, wordt de bewerking meestal onmiddellijk uitgevoerd. Er zijn echter gevallen waarin de bewerking langer kan duren vanwege de systeemtaken om de vereiste resources in te richten. In dit geval wordt geprobeerd de ingerichte doorvoer te wijzigen terwijl deze bewerking wordt uitgevoerd, een HTTP 423-antwoord met een foutbericht waarin wordt uitgelegd dat er een andere schaalbewerking wordt uitgevoerd.

Meer informatie vindt u in het artikel Aanbevolen procedures voor het schalen van ingerichte doorvoer (RU/s).

Notitie

Als u een zeer grote opnameworkload plant waarvoor een grote toename van de ingerichte doorvoer is vereist, moet u er rekening mee houden dat de schaalbewerking geen SLA heeft en, zoals vermeld in de vorige alinea, kan het lang duren wanneer de toename groot is. Mogelijk wilt u vooruit plannen en de schaal starten voordat de workload wordt gestart en de onderstaande methoden gebruiken om de voortgang te controleren.

U kunt de voortgang van het schalen programmatisch controleren door de huidige ingerichte doorvoer te lezen en het volgende te gebruiken:

U kunt metrische gegevens van Azure Monitor gebruiken om de geschiedenis van ingerichte doorvoer (RU/s) en opslag op een resource weer te geven.

Programma voor hoge opslag/lage doorvoer

Zoals beschreven in de sectie Huidige ingerichte doorvoer hierboven, is de minimale doorvoer die u kunt inrichten voor een container of database, afhankelijk van een aantal factoren. Een hiervan is de hoeveelheid gegevens die momenteel is opgeslagen, omdat Azure Cosmos DB een minimale doorvoer van 10 RU/s per GB aan opslag afdwingt.

Dit kan een probleem zijn in situaties waarin u grote hoeveelheden gegevens moet opslaan, maar een lage doorvoervereisten moet hebben. Om deze scenario's beter te kunnen opvangen, heeft Azure Cosmos DB een programma 'hoge opslag/lage doorvoer' geïntroduceerd dat de RU/s per GB-beperking voor in aanmerking komende accounts vermindert.

Om deel te nemen aan dit programma en uw volledige geschiktheid te beoordelen, hoeft u alleen maar deze enquête in te vullen. Het Azure Cosmos DB-team gaat vervolgens verder met uw onboarding.

Vergelijking van modellen

In deze tabel ziet u een vergelijking tussen de standaarddoorvoer van de inrichting (handmatig) voor een database versus een container.

Parameter Standaarddoorvoer (handmatig) voor een database Standaarddoorvoer (handmatig) voor een container Doorvoer automatisch schalen in een database Doorvoer automatisch schalen op een container
Beginpunt (minimale RU/s) 400 RU/s. Kan maximaal 25 containers hebben zonder RU/s minimaal per container. 400 Automatisch schalen tussen 100 en 1000 RU/s. Kan maximaal 25 containers hebben zonder RU/s minimaal per container. Automatisch schalen tussen 100 en 1000 RU/s.
Minimale RU/s per container -- 400 -- Automatisch schalen tussen 100 - 1000 RU/s
Maximum aantal RU's Onbeperkt, op de database. Onbeperkt, op de container. Onbeperkt, op de database. Onbeperkt, op de container.
RU's die zijn toegewezen aan of beschikbaar zijn voor een specifieke container Geen garanties. RU's die zijn toegewezen aan een bepaalde container, zijn afhankelijk van de eigenschappen. Eigenschappen kunnen de keuze zijn van partitiesleutels van containers die de doorvoer delen, de distributie van de workload en het aantal containers. Alle RU's die op de container zijn geconfigureerd, zijn exclusief gereserveerd voor de container. Geen garanties. RU's die zijn toegewezen aan een bepaalde container, zijn afhankelijk van de eigenschappen. Eigenschappen kunnen de keuze zijn van partitiesleutels van containers die de doorvoer delen, de distributie van de workload en het aantal containers. Alle RU's die op de container zijn geconfigureerd, zijn exclusief gereserveerd voor de container.
Maximale opslag voor een container Onbeperkt. Onbeperkt Onbeperkt Onbeperkt
Maximale doorvoer per logische partitie van een container 10K RU/s 10K RU/s 10K RU/s 10K RU/s
Maximale opslag (gegevens + index) per logische partitie van een container 20 GB 20 GB 20 GB 20 GB

Volgende stappen