Restaurar dados arquivados
Nesta página
Importante
Recurso Indisponível em Clusters Flex e Instâncias sem Servidor
Neste momento, os clusters flexíveis e as instâncias sem servidor não permitem essa funcionalidade. Para saber mais, consulte {+ Atlas Flex+} Limitações e Limitações de Instância sem Servidor.
Você pode restaurar dados arquivados em seu Atlas cluster. Você pode usar a sintaxe alternativa que a Atlas Data Federation fornece para o estágio de pipeline $merge para mover os dados de volta para o mesmo Atlas cluster, banco de dados ou coleção ou para diferentes dentro do mesmo projeto do Atlas.
Observação
Certifique-se de que seu cluster seja provisionado adequadamente para a quantidade de dados que será restaurada do seu arquivo para que ele não fique sem espaço durante ou após a restauração dos dados arquivados. Entre em contato com o Suporte para obter orientação técnica adicional sobre como configurar o tamanho do oplog ou para solucionar quaisquer problemas de espaço no seu Atlas cluster.
Esta página descreve como restaurar dados arquivados usando o estágio do pipeline $merge
ou as ferramentas do MongoDB .
Acesso necessário
Para seguir esse procedimento, você deve ter acessoProject Data Access Admin
ou superior ao projeto.
Procedimento
Se o conjunto de dados for pequeno, você poderá usar o estágio $merge
para mover os dados arquivados de volta para o Atlas cluster. Esta abordagem não é recomendada para grandes conjuntos de dados (em torno 1TB de dados) com um grande número de partições.
Pause o Online Archive associado à coleção cujos dados arquivados você deseja restaurar.
Consulte Pausar e retomar arquivamento para obter mais informações.
Conecte-se ao Online Archive usando a cadeia de conexão.
Você deve usar a string de conexão Archive Only para se conectar ao Online Archive. Para saber mais, consulte Conectar-se ao Online Archive.
Use para mover os dados do seu arquivo para o Atlas $merge
cluster.
Para saber mais sobre a sintaxe e o uso do estágio do pipeline $merge
para mover os dados de volta para o Atlas cluster, consulte o estágio do pipeline $merge.
Exemplo
Considere os seguintes documentos em um arquivo S3:
{ "_id" : 1, "item": "cucumber", "source": "nepal", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 2, "item": "miso", "source": "canada", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 3, "item": "oyster", "source": "luxembourg", "released": ISODate("2016-05-18T16:00:00Z") } { "_id" : 4, "item": "mushroom", "source": "ghana", "released": ISODate("2016-05-18T16:00:00Z") }
Suponha que a sintaxe $merge
para restaurar estes documentos no Atlas cluster identifique documentos com base nos campos item
e source
durante a etapa $merge
.
db.<collection>.aggregate([ { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ])
Neste exemplo, quando um documento arquivado corresponde a um documento no Atlas cluster nestes dois campos, o Atlas mantém o documento existente no cluster porque a cópia do documento no Atlas cluster é mais recente do que a cópia do documento no arquivo. Quando um documento arquivado não corresponde a nenhum documento no Atlas cluster, o Atlas insere o documento na coleção especificada no Atlas cluster.
Ao restaurar os dados de volta ao Atlas cluster, os dados arquivados podem ter campos _id
duplicados. Para este exemplo, podemos incluir um estágio $sort
para classificar os campos _id
e released
antes do estágio $merge
para garantir que o Atlas escolha os documentos com a data mais recente se houver duplicatas a serem resolvidas.
Observação
Se houver múltiplos campos on
, você deverá criar um índice único composto nos campos de identificador on
:
db.<collection>.createIndex( { item: 1, source: 1 }, { unique: true } )
Como alternativa, especifique mesclagens sequencialmente, uma para cada campo de identificador on
, para uma coleção temporária. Em seguida, mescle os dados na coleta temporária na coleta de destino usando a connection string do cluster. Você ainda deve criar um índice único para cada campo de identificador on
.
O estágio de agregação pode ser executado em segundo plano definindo o sinalizador background
como true
. Para executar este comando no mongosh
, use o db.runCommand
.
db.runCommand( "aggregate": "<collection>", "pipeline": [ { $sort: { "_id": 1, "released": 1, } }, { "$merge": { "into": { "atlas": { "clusterName": "<atlas-cluster-name>", "db": "<db-name>", "coll": "<collection-name>" } }, "on": [ "item", "source" ], "whenMatched": "keepExisting", "whenNotMatched": "insert" } } ], {"background": true} )
Para saber mais sobre como resolver campos duplicados, consulte as $merge considerações.
Verifique os dados no Atlas cluster e exclua o arquivamento online.
Consulte Excluir um Online Archive para obter mais informações.
Observação
Se você tiver problemas ao migrar dados de volta para o Atlas cluster, entre em contato com o Suporte.