Menu Docs

Restaurar dados arquivados

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 .

Para seguir esse procedimento, você deve ter acessoProject Data Access Admin ou superior ao projeto.

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.

1

Consulte Pausar e retomar arquivamento para obter mais informações.

2

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.

3

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.

4

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.