Backup com mongoexport ou mongodump?

9

Para backup de produção, o MongoDB recomenda mongodump em vez de mongoexport para precisão dos dados. No entanto, eu precisaria "limpar" os dados de um banco de dados do MongoDB antes de fazer o backup. Não conheço outras opções de depuração de dados no servidor que não sejam mongoexport . Duas questões:

  1. O mongoexport acessa o cache do MongoDB na RAM? Isso alteraria o conjunto de trabalho na RAM como o mongodump faz?
  2. O comando mongodump possui esta opção --query . "Fornece um documento JSON como uma consulta que opcionalmente limita os documentos incluídos na saída do mongodump." É necessária uma consulta para excluir determinados campos em um documento?
Howard Lee
fonte
11
Parece que você está procurando uma exportação em vez de um backup. Se você exportar apenas um subconjunto de campos, presumivelmente não poderá restaurá-lo e ter um banco de dados totalmente viável. Existem algumas outras opções a serem consideradas: criptografar qualquer campo com dados confidenciais (via código do aplicativo) para que você possa fazer um mongodumpbackup de captura instantânea normal ou do sistema de arquivos ou gravar uma exportação personalizada, se mongoexportnão fizer o que você precisa. Qualquer ferramenta ou programa que leia dados mongodpoderá alterar seu conjunto de trabalho se os dados a serem exportados forem maiores que a RAM disponível. Instantâneos de sistemas de arquivos são menos perturbadores
Stennie
Obrigado pela clarificação. Criptografia em campos é algo em que não pensei, boa sugestão.
Howard Lee

Respostas:

6

Como resposta à sua primeira pergunta, as duas ferramentas (por padrão) irão apenas percorrer o _idíndice para buscar os dados e gravá-los no disco. Portanto, sim, ambas as ferramentas terão um impacto semelhante no seu conjunto de trabalho, e é por isso que geralmente recomendo executá-las em um secundário (de preferência um secundário oculto, se possível). Vou ecoar Stennie nos comentários aqui e recomendar outros métodos de backup se você estiver lidando com grandes quantidades de dados.

Para a segunda pergunta, suponho que você esteja procurando um mongodumpequivalente da --fieldsopção de mongoexportpara apenas despejar campos específicos. A opção de consulta pode ser usada para filtrar resultados, mas não pode ser usada com uma projeção (para selecionar os campos retornados) - esta é uma solicitação de recurso que está sendo rastreada no TOOLS-28, mas ainda não está agendada. Como Stennie também mencionou, a outra opção aqui é escrever um exportador personalizado que atenda às suas necessidades (e, novamente, eu ainda recomendo executá-lo em um secundário para proteger seu conjunto de trabalho).

Adam C
fonte
6
  1. (desculpe, não sei)

  2. --query selecionará ou excluirá documentos inteiros, não campos.

Seria uma boa ideia:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. O Mongodump usa a estrutura de arquivos bson e preserva os tipos de dados . Mongoexport vai perder tipo de dados dos valores . Tais como NumberLong ("1431677405876") seriam convertidos para apenas 1431677405876. É por isso que o mongodump é recomendado se você precisar importar de volta para o MongoDB.
aldwinaldwin
fonte
Obrigado pelo seu esclarecimento sobre --query, e o exemplo do tipo de dados de perda mongoexport.
Howard Lee
0

O Mongoexport realmente preserva os tipos, mas torna os dados inconsistentes. Se você estiver exportando um campo com Ints e Longs, ele será exportado como objetos Numbers e JSON, respectivamente, o que pode dificultar o processo.

"Modo estrito. As representações de modo estrito dos tipos BSON estão em conformidade com o JSON RFC. Qualquer analisador JSON pode analisar essas representações de modo estrito como pares de chave / valor; no entanto, apenas o analisador JSON interno do MongoDB reconhece as informações de tipo transmitidas pelo formato."

https://docs.mongodb.com/manual/reference/mongodb-extended-json/

lf2225
fonte