¿Copia de seguridad con mongoexport o mongodump?

9

Para la copia de seguridad de producción, MongoDB recomienda mongodump en lugar de mongoexport para la precisión de los datos. Sin embargo, necesitaría "borrar" datos de una base de datos MongoDB antes de hacer una copia de seguridad. No conozco ninguna opción de depuración de datos del lado del servidor que no sea mongoexport . Dos preguntas:

  1. ¿ Mongoexport accede a la memoria caché MongoDB en RAM? ¿ Alteraría el conjunto de trabajo en RAM como lo hace mongodump ?
  2. El comando mongodump tiene esta opción --query . "Proporciona un documento JSON como una consulta que opcionalmente limita los documentos incluidos en la salida de mongodump". ¿Se necesita una consulta para excluir ciertos campos en un documento?
Howard Lee
fuente
1
Parece que está buscando una exportación en lugar de una copia de seguridad. Si solo exporta un subconjunto de campos, presumiblemente no podrá restaurar eso y tener una base de datos totalmente viable. Hay algunas otras opciones a considerar: encriptar cualquier campo con datos confidenciales (a través del código de la aplicación) para que pueda hacer una mongodumpcopia de seguridad de la instantánea normal o del sistema de archivos, o escribir una exportación personalizada si mongoexportno hace lo que necesita. Cualquier herramienta o programa que lea datos mongodpodría alterar su conjunto de trabajo si sus datos para exportar son mayores que la RAM disponible. Las instantáneas del sistema de archivos son menos perjudiciales
Stennie
Gracias por la aclaración. El cifrado en los campos es algo en lo que no he pensado, buena sugerencia.
Howard Lee

Respuestas:

6

Como respuesta a su primera pregunta, ambas herramientas (por defecto) simplemente recorrerán el _idíndice para obtener los datos y luego los escribirán en el disco. Entonces, sí, ambas herramientas impactarán de manera similar en su conjunto de trabajo, por lo que generalmente recomendaría ejecutarlas en un secundario (preferiblemente un secundario oculto si es posible). Haré eco de Stennie en los comentarios aquí y recomendaré otros métodos de respaldo si se trata de grandes cantidades de datos.

Para la segunda pregunta, supongo que está buscando un mongodumpequivalente de la --fieldsopción de mongoexportsolo volcar campos específicos. La opción de consulta se puede usar para filtrar resultados, pero no se puede usar con una proyección (para seleccionar los campos devueltos): esta es una solicitud de función que se está rastreando en TOOLS-28 pero aún no está programada. Como también mencionó Stennie, la otra opción aquí es escribir un exportador personalizado que se ajuste a sus necesidades (y de nuevo, aún recomendaría ejecutarlo en un secundario para proteger su conjunto de trabajo).

Adam C
fuente
6
  1. (lo siento, no sé)

  2. - consulta seleccionará o excluirá documentos completos, no campos.

Sin embargo, sería una buena idea:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump utiliza la estructura de archivos bson y conserva los tipos de datos . Mongoexport se perderá tipo de datos de los valores . Tales como NumberLong ("1431677405876") se convertiría en solo 1431677405876. Por eso se recomienda mongodump si necesita importar de nuevo a MongoDB.
aldwinaldwin
fuente
Gracias por su aclaración sobre --query, y el ejemplo sobre el tipo de datos de pérdida de mongoexport.
Howard Lee
0

Mongoexport realmente preserva los tipos, pero hace que los datos sean inconsistentes. Si está exportando un campo con Ints y Longs, lo exportará como objetos Números y JSON respectivamente, lo que puede dificultar el camino.

"Modo estricto. Las representaciones de modo estricto de los tipos BSON se ajustan al RFC de JSON. Cualquier analizador JSON puede analizar estas representaciones de modo estricto como pares clave / valor; sin embargo, solo el analizador JSON interno de MongoDB reconoce la información de tipo transmitida por el formato".

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

lf2225
fuente