Backup mit Mongoexport oder Mongodump?

9

Für die Produktionssicherung empfiehlt MongoDB aus Gründen der Datengenauigkeit Mongodump anstelle von Mongoexport . Ich müsste jedoch Daten aus einer MongoDB-Datenbank "scrubben", bevor ich sie sichern kann. Mir sind keine anderen serverseitigen Datenbereinigungsoptionen als mongoexport bekannt . Zwei Fragen:

  1. Ist mongoexport Zugriff MongoDB Cache in RAM? Würde es den Arbeitssatz im RAM ändern, wie es Mongodump tut?
  2. Der Befehl mongodump verfügt über diese Option --query . "Stellt ein JSON-Dokument als Abfrage bereit, die optional die in der Ausgabe von mongodump enthaltenen Dokumente einschränkt." Ist eine Abfrage erforderlich, um bestimmte Felder in einem Dokument auszuschließen?
Howard Lee
quelle
1
Es hört sich so an, als würden Sie eher nach einem Export als nach einem Backup suchen. Wenn Sie nur eine Teilmenge von Feldern exportieren, können Sie diese vermutlich nicht wiederherstellen und verfügen über eine voll funktionsfähige Datenbank. Es gibt noch einige andere Optionen, die Sie berücksichtigen sollten: Verschlüsseln Sie alle Felder mit vertraulichen Daten (über den Anwendungscode), damit Sie eine normale mongodumpoder Dateisystem-Snapshot-Sicherung durchführen oder einen benutzerdefinierten Export schreiben können, wenn Sie mongoexportnicht das tun, was Sie benötigen. Alle Tools oder Programme, aus denen Daten gelesen werden, mongodkönnen Ihren Arbeitssatz ändern, wenn Ihre zu exportierenden Daten größer sind als der verfügbare RAM. Dateisystem-Snapshots sind weniger störend
Stennie
Danke für die Klarstellung. Die Verschlüsselung von Feldern ist etwas, woran ich nicht gedacht habe, ein guter Vorschlag.
Howard Lee

Antworten:

6

Als Antwort auf Ihre erste Frage durchsuchen beide Tools (standardmäßig) nur den _idIndex, um die Daten abzurufen und dann auf die Festplatte zu schreiben. Ja, beide Tools wirken sich in ähnlicher Weise auf Ihren Arbeitssatz aus. Daher würde ich generell empfehlen, sie auf einer sekundären (wenn möglich vorzugsweise einer versteckten sekundären) auszuführen. Ich werde Stennie in den Kommentaren hier wiederholen und andere Sicherungsmethoden empfehlen, wenn Sie mit großen Datenmengen arbeiten.

Bei der zweiten Frage gehe ich davon aus, dass Sie nach einem mongodumpÄquivalent der --fieldsOption suchen, um mongoexportnur bestimmte Felder auszugeben. Die Abfrageoption kann zum Filtern von Ergebnissen verwendet werden, kann jedoch nicht mit einer Projektion verwendet werden (um die zurückgegebenen Felder auszuwählen). Dies ist eine Funktionsanforderung, die in TOOLS-28 verfolgt wird, aber noch nicht geplant ist. Wie Stennie auch erwähnte, besteht die andere Möglichkeit darin, einen benutzerdefinierten Exporter zu schreiben, der Ihren Anforderungen entspricht (und ich würde weiterhin empfehlen, ihn gegen eine sekundäre Version auszuführen, um Ihren Arbeitssatz zu schützen).

Adam C.
quelle
6
  1. (Entschuldigung, keine Ahnung)

  2. --query wählt ganze Dokumente aus oder schließt sie aus, keine Felder.

Es wäre jedoch eine gute Idee:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump verwendet die bson-Dateistruktur und behält die Datentypen bei . Mongoexport wird Datentyp des Wertes verlieren . Zum Beispiel würde NumberLong ("1431677405876") in nur 1431677405876 konvertiert. Aus diesem Grund wird Mongodump empfohlen, wenn Sie zurück in MongoDB importieren müssen.
aldwinaldwin
quelle
Vielen Dank für Ihre Klarstellung zu --query und das Beispiel zum Datentyp mongoexport loss.
Howard Lee
0

Mongoexport behält zwar Typen bei, macht die Daten jedoch inkonsistent. Wenn Sie ein Feld mit Ints und Longs exportieren, wird es als Numbers- bzw. JSON-Objekt exportiert, was es später schwieriger machen kann.

"Strenger Modus. Strenge Modusdarstellungen von BSON-Typen entsprechen dem JSON-RFC. Jeder JSON-Parser kann diese strengen Modusdarstellungen als Schlüssel / Wert-Paare analysieren. Allerdings erkennt nur der interne MongoDB-JSON-Parser die vom Format übermittelten Typinformationen."

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

lf2225
quelle