it-swarm.com.de

Backup mit Mongoexport oder Mongodump?

Für die Produktionssicherung empfiehlt MongoDB mongodump anstelle von mongoexport für die Genauigkeit der Daten. 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. Greift mongoexport auf den MongoDB-Cache im RAM zu? Würde es den Arbeitssatz in RAM wie mongodump ) ändern?
  2. Der Befehl mongodump hat 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?
9
Howard Lee

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

Für die zweite Frage gehe ich davon aus, dass Sie nach einem mongodump Äquivalent des --fields Option von mongoexport, um nur 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 ist aber noch nicht geplant. 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).

6
Adam C
  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 verliert den Datentyp der Werte . 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.
6
aldwinaldwin

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 JSON-Parser von MongoDB die vom Format übermittelten Typinformationen."

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

0
lf2225