Sdílet prostřednictvím


Kopírování úloh ve službě Azure Cosmos DB (Preview)

Kopírování dat ve službě Azure Cosmos DB můžete provádět pomocí úloh kopírování kontejneru.

Pokud chcete dosáhnout některého z těchto scénářů, budete možná muset zkopírovat data ze svého účtu služby Azure Cosmos DB:

Úlohy kopírování je možné vytvářet a spravovat pomocí příkazů Azure CLI.

Začínáme

Požadavky

  1. Povolte průběžné zálohování u zdrojového účtu služby Azure Cosmos DB.
  2. U zdrojového účtu povolte preview funkci všech verzí a odstranění režimu změnového kanálu.

Povolit online kopírování

Pokud chcete ve zdrojovém účtu povolit online kopírování, proveďte následující kroky pomocí Azure CLI.

# Set shell variables.
 $resourceGroupName = <azure_resource_group>
 $accountName = <azure_cosmos_db_account_name>
 $EnableOnlineContainerCopy = "EnableOnlineContainerCopy"

# List down existing capabilities of your account.
 $cosmosdb = az cosmosdb show \
    --resource-group $resourceGroupName \
    --name $accountName

$capabilities = (($cosmosdb | ConvertFrom-Json).capabilities)

# Append EnableOnlineContainerCopy capability in the list of capabilities.
 $capabilitiesToAdd = @()
 foreach ($item in $capabilities) {
    $capabilitiesToAdd += $item.name
 }
 $capabilitiesToAdd += $EnableOnlineContainerCopy

 # Update Cosmos DB account
 az cosmosdb update --capabilities $capabilitiesToAdd \
    -n $accountName -g $resourceGroupName

Důležité

Za všechny operace zápisu na zdrojovém účtu se účtují dvojité RU, aby se zachovaly předchozí i aktuální verze změn položek v kontejneru. Toto zvýšení poplatků za RU se může v budoucnu změnit.

Kopírování dat kontejneru

  1. Vytvořte cílový kontejner Azure Cosmos DB pomocí nastavení, která chcete použít (klíč oddílu, členitost propustnosti, jednotky žádostí, jedinečný klíč atd.).
  2. Vytvořte úlohu kopírování kontejneru.
  3. Monitorujte průběh úlohy kopírování.
  4. Po zkopírování všech dokumentů zastavte aktualizace zdrojového kontejneru a potom zavolejte rozhraní API pro dokončování, které označí úlohu jako dokončenou.
  5. Pokračujte v operacích tím, že aplikaci nebo klienta odpovídajícím způsobem nasměrujte na zdrojový nebo cílový kontejner.

Jak funguje kopírování kontejneru?

  1. Platforma přiděluje cílovému účtu služby Azure Cosmos DB výpočetní instance na straně serveru ke spuštění úloh kopírování kontejneru.
  2. V každém okamžiku se spustí jedna úloha ve všech instancích.
  3. Online úlohy kopírování využívají režim sledování změn všech verzí a odstranění ke kopírování dat a replikaci přírůstkových změn ze zdrojového kontejneru do cílového kontejneru.
  4. Po dokončení úlohy platforma tyto instance uvolňuje po 15 minutách nečinnosti.

Offline kopírovací úlohy kolekcí můžete provádět k účelu kopírování dat ve stejném účtu služby Azure Cosmos DB pro MongoDB.

Kopírování dat kolekce

  1. Vytvořte cílovou kolekci Azure Cosmos DB pomocí nastavení, která chcete použít (klíč oddílu, členitost propustnosti, jednotky žádostí, jedinečný klíč atd.).
  2. Zastavte operace ve zdrojové kolekci pozastavením instancí aplikace nebo všech klientů, kteří se k ní připojují.
  3. Vytvořte úlohu kopírování.
  4. Sledujte průběh úlohy kopírování a počkejte, až se dokončí.
  5. Pokračujte v operacích tím, že odpovídajícím způsobem nasměrujte aplikaci nebo klienta na zdroj nebo cílovou kolekci podle očekávání.

Poznámka:

Důrazně doporučujeme, abyste před zahájením offline úlohy kopírování kolekce přestali provádět všechny operace ve zdrojové kolekci. Odstranění položek a aktualizace provedené ve zdrojové kolekci po spuštění úlohy kopírování nemusí být zachyceny. Pokud v průběhu úlohy kopírování pokračujete v provádění operací se zdrojovými kolekcemi, může dojít k duplikování nebo chybějícím datům v cílové kolekci.

Jak funguje proces kopírování kolekce?

  1. Platforma přidělí výpočetní instance na straně serveru pro cílový účet služby Azure Cosmos DB.
  2. Tyto instance jsou přiděleny při vytvoření jedné nebo více úloh kopírování kolekce v rámci účtu.
  3. Úlohy kopírování se spouštějí v těchto instancích.
  4. V každém okamžiku se spustí jedna úloha ve všech instancích.
  5. Instance jsou sdíleny všemi úlohami kopírování spuštěnými ve stejném účtu.
  6. Offline kopírovací úlohy využívají streamy změn ke kopírování dat a replikaci přírůstkových změn ze zdrojové kolekce do cílové kolekce.
  7. Platforma může uvolnit instance, pokud jsou nečinné déle než 15 minut.

Můžete provést offline kopírování tabulky pro zkopírování dat z jedné tabulky do druhé ve stejném účtu Azure Cosmos DB for Apache Cassandra.

Kopírování dat tabulky

  1. Vytvořte cílovou tabulku Azure Cosmos DB pomocí nastavení, která chcete použít (klíč oddílu, členitost propustnosti, jednotky žádostí atd.).
  2. Zastavte operace ve zdrojové tabulce pozastavením instancí aplikace nebo všech klientů, kteří se k ní připojují.
  3. Vytvořte úlohu kopírování.
  4. Sledujte průběh úlohy kopírování a počkejte, až se dokončí.
  5. Pokračujte v operacích tím, že aplikaci nebo klienta odpovídajícím způsobem nasměrujte na zdroj nebo cílovou tabulku.

Poznámka:

Důrazně doporučujeme, abyste před zahájením offline úlohy kopírování tabulky přestali provádět všechny operace ve zdrojové tabulce. Odstranění položek a aktualizace provedené ve zdrojové tabulce po spuštění úlohy kopírování nemusí být zachyceny. Pokud budete pokračovat v provádění operací se zdrojovými tabulkami, zatímco probíhá úloha kopírování, můžete mít duplicitní nebo chybějící data v cílové tabulce.

Jak funguje kopírování tabulky?

  1. Platforma přidělí výpočetní instance na straně serveru pro cílový účet služby Azure Cosmos DB.
  2. Tyto instance se přidělují při vytvoření jedné nebo více úloh kopírování v rámci účtu.
  3. Úlohy kopírování se spouštějí v těchto instancích.
  4. V každém okamžiku se spustí jedna úloha ve všech instancích.
  5. Instance jsou sdíleny všemi úlohami kopírování spuštěnými ve stejném účtu.
  6. Offline úlohy kopírování využívají kanál změn ke kopírování dat a replikaci přírůstkových změn ze zdrojové tabulky do cílové tabulky.
  7. Platforma může uvolnit instance, pokud jsou nečinné déle než 15 minut.

Faktory, které ovlivňují rychlost úlohy kopírování

Rychlost průběhu úlohy kopírování kontejneru je určena těmito faktory:

  • Nastavení propustnosti zdrojového kontejneru nebo databáze

  • Nastavení propustnosti cílového kontejneru nebo databáze.

    Návod

    Nastavte propustnost cílového kontejneru na alespoň dvakrát propustnost zdrojového kontejneru.

  • Výpočetní instance na straně serveru, které jsou přiděleny k účtu služby Azure Cosmos DB pro provádění přenosu dat.

    Důležité

    Výchozí varianta SKU nabízí na každý účet dvě instance na straně serveru s 4 vCPU a 16 GB.

Omezení

Kritéria způsobilosti pro verzi Preview

Úlohy kopírování kontejnerů nefungují s účty, které mají povolené následující funkce. Před spuštěním úloh kopírování kontejneru tyto funkce zakažte:

Konfigurace účtu

Nastavení TTL (Time to Live) se v cílovém kontejneru neupravuje. V důsledku toho, pokud ve zdrojovém kontejneru nevypršela platnost dokumentu, spustí se jeho odpočítávání znovu v cílovém kontejneru.

Nejčastější dotazy

Existuje smlouva o úrovni služeb pro úlohy kopírování kontejnerů?

Úlohy kopírování kontejnerů se v současné době podporují na základě maximálního úsilí. Neposkytujeme žádné záruky smlouvy o úrovni služeb (SLA) za dobu potřebnou k dokončení úloh.

Můžu v rámci účtu vytvořit více úloh kopírování kontejneru?

Ano, v rámci stejného účtu můžete vytvořit více úloh. Úlohy běží po sobě. Můžete zobrazit seznam všech úloh vytvořených v rámci účtu a sledovat jejich průběh.

Můžu zkopírovat celou databázi v rámci účtu služby Azure Cosmos DB?

Pro každý kontejner v databázi musíte vytvořit úlohu.

Mám účet Cosmos DB s více oblastmi. Ve kterém regionu se spustí úloha kopírování kontejneru?

Úloha kopírování kontejneru se spustí v oblasti zápisu. V účtu, který je nakonfigurovaný pro zápisy do více oblastí, se úloha spustí v jedné z oblastí v seznamu oblastí zápisu.

Co se stane s úlohami kopírování kontejneru při změně oblasti zápisu účtu?

Ve vzácném scénáři výpadku oblasti nebo kvůli ručnímu převzetí služeb při selhání se může oblast zápisu účtu změnit. V tomto scénáři se nezdaří úlohy kopírování neúplných kontejnerů vytvořené v rámci účtu. Tyto neúspěšné úlohy byste museli znovu vytvořit. Znovu vytvořené úlohy se pak spustí v nové (aktuální) oblasti zápisu.

Podporované oblasti

V současné době se kopírování kontejnerů podporuje v následujících oblastech:

Severní a Jižní Amerika Evropa a Afrika Asie a Tichomoří
Brazílie – jih Francie – střed Austrálie – střed
Kanada – střed Francie – jih Austrálie – střed 2
Kanada – východ Německo – sever Austrálie – východ
Střed USA Německo – středozápad Indie – střed
USA – střed (EUAP) Severní Evropa Japonsko – východ
USA – východ​ Norsko – východ Korea – střed
USA – východ 2 Norsko – západ Jihovýchodní Asie
USA – východ 2 (EUAP) Švýcarsko – sever Spojené arabské emiráty – střed
Střed USA – sever Švýcarsko – západ Indie – západ
Střed USA – jih Velká Británie – jih Východní Asie
Středozápadní USA Velká Británie – západ Malajsie – jih
USA – západ Západní Evropa Japonsko – západ
USA – západ 2​ Izrael – střed Austrálie – jihovýchod
Nepodporováno Jižní Afrika – sever Nepodporováno

Známé a běžné problémy

  • Při použití funkce kopírování online kontejneru, pokud id je pole změněno ve zdrojovém kontejneru, cílový kontejner ukládá dva samostatné dokumenty, z nichž každý odpovídá jedinečným id hodnotám.

  • Při změně klíčů oddílů během kopírování dat do cílového kontejneru se ujistěte, že je nový klíč oddílu a id kombinace v celém kontejneru jedinečné.

    Představte si například následující scénář:

    Původní klíč oddílu:/department
    Zdrojové dokumenty:

    {
        "id": "101",
        "employeeName": "John Doe",
        "department": "HR"
    },
    {
        "id": "101",
        "employeeName": "John Doe",
        "department": "Finance"
    }
    

    Nový klíč oddílu:/employeeName
    Výsledné dokumenty v cílovém kontejneru:

    {
        "id": "101",
        "employeeName": "John Doe",
        "department": "HR"
    },
    {
        "id": "101",
        "employeeName": "John Doe",
        "department": "Finance"
    }
    

    V tomto případě teď oba dokumenty sdílejí stejný klíč oddílu (/employeeName) v kombinaci s id ("employeeName": "John Doe", "id": "101"), což způsobuje konflikt. Výsledkem tohoto konfliktu je chyba vložení. Abyste se těmto problémům vyhnuli, ujistěte se, že nový klíč oddílu a id kombinace jsou jedinečné ve všech dokumentech v cílovém kontejneru.

  • Chyba – Klíč oddílu dosáhl maximální velikosti 20 GB

    Při úpravě klíčů oddílů během kopírování dat do cílového kontejneru se ujistěte, že nový klíč oddílu zůstane v limitu velikosti klíče logického oddílu 20 GB. Pokud dojde k překročení tohoto limitu, úloha selže s následující chybou:

    "code": "403",
    "message": "Response status code does not indicate success: Forbidden (403); Substatus: 1014; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: (Message: {"Errors":["Partition key reached maximum size of 20 GB. Learn more: https://aka.ms/CosmosDB/sql/errors/full-pk"]"
    
  • Chyba – Prostředek vlastníka neexistuje

    Pokud se vytvoření úlohy nezdaří a zobrazí se chyba "Prostředek vlastníka neexistuje" (kód chyby 404), cílový kontejner ještě nebyl vytvořen nebo název kontejneru, který se používá k vytvoření úlohy, neodpovídá skutečnému názvu kontejneru.

    Před spuštěním úlohy se ujistěte, že je cílový kontejner vytvořen, a ujistěte se, že název kontejneru v úloze odpovídá skutečnému názvu kontejneru.

    "code": "404",
    "message": "Response status code does not indicate success: NotFound (404); Substatus: 1003; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: (Message: {\"Errors\":[\"Owner resource does not exist\"]
    
  • Chyba – Chyba při získávání prostředků pro úlohu

    K této chybě může dojít kvůli interním problémům se serverem. Pokud chcete tento problém vyřešit, obraťte se na podpora Microsoftu otevřením nové žádosti o podporu na webu Azure Portal. V případě typu problému vyberte Migraci dat. Pro podtyp Problém vyberte kopii kontejneru v rámci účtu.

    "code": "500"
    "message": "Error while getting resources for job, StatusCode: 500, SubStatusCode: 0, OperationId:  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

Další krok