Honderden terabytes aan gegevens migreren naar Azure Cosmos DB
VAN TOEPASSING OP:
SQL-API
Cassandra-API
Gremlin-API
Table-API
Azure Cosmos DB-API voor MongoDB
Azure Cosmos DB kan terabytes aan gegevens opslaan. U kunt een grootschalige gegevensmigratie uitvoeren om de werkbelasting van uw productie naar Azure Cosmos DB te verplaatsen. In dit artikel worden de uitdagingen beschreven van het verplaatsen van grootschalige gegevens naar Azure Cosmos DB en wordt u voorgesteld aan het hulpprogramma dat u helpt bij deze uitdagingen en dat gegevens naar Azure Cosmos DB migreert. In deze casestudy heeft de klant de Cosmos DB SQL-API gebruikt.
Voordat u de volledige workload naar Azure Cosmos DB migreert, kunt u een subset van gegevens migreren om enkele aspecten te valideren, zoals de keuze van de partitiesleutel, queryprestaties en gegevensmodelleer. Nadat u het testen van het concept hebt gevalideerd, kunt u de hele workload naar Azure Cosmos DB.
Hulpprogramma's voor gegevensmigratie
Azure Cosmos DB migratiestrategieën verschillen momenteel op basis van de API-keuze en de grootte van de gegevens. Als u kleinere gegevenssets wilt migreren , voor het valideren van gegevensmodelleren, queryprestaties, het kiezen van partitiesleutels, enzovoort, kunt u het hulpprogramma voor gegevensmigratie of de Azure Cosmos DB-connector van Azure Data Factory kiezen. Als u bekend bent met Spark, kunt u er ook voor kiezen om de Azure Cosmos DB Spark-connector te gebruiken om gegevens te migreren.
Uitdagingen voor grootschalige migraties
De bestaande hulpprogramma's voor het migreren van gegevens Azure Cosmos DB hebben enkele beperkingen die met name duidelijk worden op grote schaal:
Beperkte mogelijkheden voor uitschalen: als u terabytes aan gegevens zo snel mogelijk naar Azure Cosmos DB wilt migreren en de volledige inrichtende doorvoer effectief wilt gebruiken, moeten de migratie-clients de mogelijkheid hebben om voor onbepaalde tijd uit te schalen.
Geen voortgangstracking en controlewijzen: het is belangrijk om de voortgang van de migratie bij te houden en een controle te laten zien tijdens het migreren van grote gegevenssets. Anders wordt de migratie gestopt als er een fout optreedt tijdens de migratie en moet u het proces opnieuw starten. Het zou niet productief zijn om het hele migratieproces opnieuw te starten wanneer 99% ervan al is voltooid.
Ontbreken van wachtrij voor onbeslopende berichten: Binnen grote gegevenssets kunnen er in sommige gevallen problemen zijn met onderdelen van de brongegevens. Daarnaast kunnen er tijdelijke problemen zijn met de client of het netwerk. Een van deze gevallen mag er niet toe leiden dat de hele migratie mislukt. Hoewel de meeste migratiehulpprogramma's robuuste mogelijkheden voor opnieuw proberen hebben die bescherming bieden tegen onregelmatige problemen, is het niet altijd voldoende. Als bijvoorbeeld minder dan 0,01% van de brongegevensdocumenten groter is dan 2 MB, mislukt het schrijven van het document in Azure Cosmos DB. In het ideale moment is het handig dat het migratiehulpprogramma deze 'mislukte' documenten persistent maakt in een andere wachtrij voor in wachtrijen met inlopende berichten, die na de migratie kan worden verwerkt.
Veel van deze beperkingen worden opgelost voor hulpprogramma's zoals Azure Data Factory en Azure Data Migration Services.
Aangepast hulpprogramma met bulkuitvoerbibliotheek
De uitdagingen die in de bovenstaande sectie worden beschreven, kunnen worden opgelost met behulp van een aangepast hulpprogramma dat eenvoudig kan worden geschaald over meerdere exemplaren en bestand is tegen tijdelijke fouten. Daarnaast kan het aangepaste hulpprogramma de migratie op verschillende controlepunten onderbreken en hervatten. Azure Cosmos DB biedt al de bulkuitvoerbibliotheek waarin een aantal van deze functies zijn opgenomen. De bulkuitvoerbibliotheek beschikt bijvoorbeeld al over de functionaliteit voor het afhandelen van tijdelijke fouten en kan threads in één knooppunt uitschalen om ongeveer 500.000.000 RUs per knooppunt te verbruiken. De bulkuitvoerbibliotheek partitioneert de bron-gegevensset ook in microbatchs die onafhankelijk worden uitgevoerd als een vorm van controlepunten.
Het aangepaste hulpprogramma maakt gebruik van de bulkuitvoerbibliotheek en biedt ondersteuning voor uitschalen naar meerdere clients en voor het bijhouden van fouten tijdens het opnameproces. Als u dit hulpprogramma wilt gebruiken, moeten de brongegevens worden gepartitief in afzonderlijke bestanden in Azure Data Lake Storage (ADLS), zodat verschillende migratiemedewerkers elk bestand kunnen ophalen en opnemen in Azure Cosmos DB. Het aangepaste hulpprogramma maakt gebruik van een afzonderlijke verzameling, waarin metagegevens over de voortgang van de migratie voor elk afzonderlijk bronbestand in ADLS worden opgeslagen en eventuele bijbehorende fouten worden bijgeslagen.
In de volgende afbeelding wordt het migratieproces beschreven met behulp van dit aangepaste hulpprogramma. Het hulpprogramma wordt uitgevoerd op een set virtuele machines en elke virtuele machine vraagt de traceringsverzameling in Azure Cosmos DB op om een lease te verkrijgen op een van de brongegevenspartities. Zodra dit is gebeurd, wordt de brongegevenspartitie gelezen door het hulpprogramma en opgenomen in Azure Cosmos DB met behulp van de bulkuitvoerbibliotheek. Vervolgens wordt de traceringsverzameling bijgewerkt om de voortgang van de gegevens opname en eventuele fouten vast te registreren. Nadat een gegevenspartitie is verwerkt, probeert het hulpprogramma een query uit te voeren voor de volgende beschikbare bronpartitie. De volgende bronpartitie wordt verwerkt totdat alle gegevens zijn gemigreerd. De broncode voor het hulpprogramma is beschikbaar in de Azure Cosmos DB-repo voor bulksgewijs opnemen.
De traceringsverzameling bevat documenten zoals wordt weergegeven in het volgende voorbeeld. U ziet dergelijke documenten één voor elke partitie in de brongegevens. Elk document bevat de metagegevens voor de brongegevenspartitie, zoals de locatie, migratiestatus en fouten (indien van toepassing):
{
"owner": "25812@bulkimporttest07",
"jsonStoreEntityImportResponse": {
"numberOfDocumentsReceived": 446688,
"isError": false,
"totalRequestUnitsConsumed": 3950252.2800000003,
"errorInfo": [],
"totalTimeTakenInSeconds": 188,
"numberOfDocumentsImported": 446688
},
"storeType": "AZURE_BLOB",
"name": "sourceDataPartition",
"location": "sourceDataPartitionLocation",
"id": "sourceDataPartitionId",
"isInProgress": false,
"operation": "unpartitioned-writes",
"createDate": {
"seconds": 1561667225,
"nanos": 146000000
},
"completeDate": {
"seconds": 1561667515,
"nanos": 180000000
},
"isComplete": true
}
Vereisten voor gegevensmigratie
Voordat de gegevensmigratie wordt gestart, zijn er enkele vereisten om rekening mee te houden:
De gegevensgrootte schatten:
De grootte van de brongegevens is mogelijk niet exact toe te staan aan de gegevensgrootte in Azure Cosmos DB. Er kunnen enkele voorbeelddocumenten uit de bron worden ingevoegd om de gegevensgrootte in de Azure Cosmos DB. Afhankelijk van de grootte van het voorbeelddocument kan de totale gegevensgrootte in Azure Cosmos DB migratie worden geschat.
Als elk document na de migratie in Azure Cosmos DB bijvoorbeeld ongeveer 1 kB bedraagt en er ongeveer 60 miljard documenten in de bronset staan, betekent dit dat de geschatte grootte in Azure Cosmos DB bijna 60 TB is.
Maak vooraf containers met voldoende RUs:
Hoewel Azure Cosmos DB opslag automatisch uitschaalt, is het niet raadzaam om te beginnen met de kleinste containergrootte. Kleinere containers hebben een lagere doorvoerbeschikbaarheid, wat betekent dat de migratie veel langer duurt. In plaats daarvan is het handig om de containers met de uiteindelijke gegevensgrootte te maken (zoals geschat in de vorige stap) en ervoor te zorgen dat de migratieworkload volledig gebruikmaakt van de inrichtende doorvoer.
In de vorige stap. omdat de gegevensgrootte naar schatting ongeveer 60 TB is, is een container van ten minste 2,4 M RUs vereist voor de hele gegevensset.
De migratiesnelheid schatten:
Ervan uitgaande dat de migratieworkload de volledige inrichtende doorvoer kan verbruiken, geeft de inrichten overal een schatting van de migratiesnelheid. Als we verdergaan met het vorige voorbeeld, zijn 5 RUs vereist voor het schrijven van een document van 1 kB naar Azure Cosmos DB SQL API-account. Met 2,4 miljoen RUs is een overdracht van 480.000 documenten per seconde (of 480 MB/s) mogelijk. Dit betekent dat de volledige migratie van 60 TB 125.000 seconden of ongeveer 34 uur duurt.
Als u wilt dat de migratie binnen een dag wordt voltooid, moet u de inrichtende doorvoer verhogen naar 5 miljoen RUs.
Schakel de indexering uit:
Aangezien de migratie zo snel mogelijk moet worden voltooid, is het raadzaam om de tijd en HET AANTAL besteed aan het maken van indexen voor elk van de opgenomen documenten te minimaliseren. Azure Cosmos DB alle eigenschappen automatisch indexeert, is het de moeite waard om de indexering te minimaliseren tot een aantal geselecteerde termen of om deze volledig uit te schakelen voor de migratie. U kunt het indexeringsbeleid van de container uitschakelen door indexingMode in geen te wijzigen, zoals hieronder wordt weergegeven:
{
"indexingMode": "none"
}
Nadat de migratie is voltooid, kunt u de indexering bijwerken.
Migratieproces
Nadat de vereisten zijn voltooid, kunt u gegevens migreren met de volgende stappen:
Importeer eerst de gegevens uit de bron naar Azure Blob Storage. Als u de snelheid van de migratie wilt verhogen, is het handig om parallel te werken over verschillende bronpartities. Voordat u de migratie start, moet de brongegevensset worden gepartitief in bestanden met een grootte van ongeveer 200 MB.
De bulkuitvoerbibliotheek kan omhoog worden geschaald om 500.000 RUs te verbruiken in één client-VM. Omdat de beschikbare doorvoer 5 miljoen RU's is, moeten 10 Ubuntu 16.04 VM's (Standard_D32_v3) worden ingericht in dezelfde regio waarin uw Azure Cosmos-database zich bevindt. U moet deze VM's voorbereiden met het migratieprogramma en het instellingenbestand.
Voer de wachtrijstap uit op een van de virtuele machines van de client. Met deze stap maakt u de traceringsverzameling, die de ADLS-container scant en een document voor het bijhouden van voortgang maakt voor elk van de partitiebestanden van de brongegevensset.
Voer vervolgens de importstap uit op alle client-VM's. Elk van de clients kan eigenaar worden van een bronpartitie en de gegevens opnemen in Azure Cosmos DB. Zodra deze is voltooid en de status ervan is bijgewerkt in de traceringsverzameling, kunnen de clients een query uitvoeren op de volgende beschikbare bronpartitie in de traceringsverzameling.
Dit proces gaat door totdat de volledige set bronpartities is opgenomen. Zodra alle bronpartities zijn verwerkt, moet het hulpprogramma opnieuw worden uitgevoerd in de foutcorrectiemodus op dezelfde traceringsverzameling. Deze stap is vereist om de bronpartities te identificeren die vanwege fouten opnieuw moeten worden verwerkt.
Sommige van deze fouten kunnen worden veroorzaakt door onjuiste documenten in de brongegevens. Deze moeten worden geïdentificeerd en opgelost. Vervolgens moet u de importstap voor de mislukte partities opnieuw uit te proberen.
Zodra de migratie is voltooid, kunt u controleren of het aantal documenten in Azure Cosmos DB hetzelfde is als het aantal documenten in de brondatabase. In dit voorbeeld is de totale grootte in Azure Cosmos DB 65 terabytes. Na de migratie kan indexeren selectief worden ingeschakeld en kunnen de BENODIGDE's worden verlaagd tot het niveau dat is vereist voor de bewerkingen van de workload.
Volgende stappen
- Probeer de voorbeeldtoepassingen uit die de bibliotheek voor bulksgewijs uitvoeren gebruiken in .NET en Java voor meer informatie.
- De bibliotheek voor bulkuitvoer is geïntegreerd in de Cosmos DB Spark-connector. Zie het artikel over de Spark Azure Cosmos DB connector voor meer informatie.
- Neem contact op met het Azure Cosmos DB-productteam door een ondersteuningsticket te openen onder het probleemtype Algemeen advies en het subtype Grote migraties (TB+) voor aanvullende hulp bij grootschalige migraties.
- Probeert u capaciteitsplanning uit te Azure Cosmos DB? U kunt informatie over uw bestaande databasecluster gebruiken voor capaciteitsplanning.
- Als u alleen het aantal vcores en servers in uw bestaande databasecluster weet, leest u over het schatten van aanvraageenheden met behulp van vCores of vCCPUs
- Als u de gebruikelijke aanvraagsnelheden voor uw huidige databaseworkload kent, leest u over het schatten van aanvraageenheden met behulp van Azure Cosmos DB capacity planner