Ich habe eine Sammlung mit 9 Millionen Datensätzen. Ich bin derzeit das folgende Skript die gesamte Sammlung zu aktualisieren:MongoDB - Was ist der schnellste Weg, um alle Datensätze in einer Sammlung zu aktualisieren?
simple_update.js
db.mydata.find().forEach(function(data) {
db.mydata.update({_id:data._id},{$set:{pid:(2571 - data.Y + (data.X * 2572))}});
});
Dies wird von der Kommandozeile ausgeführt werden, wie folgt:
mongo my_test simple_update.js
Also alles, was ich bin doing ist ein neues Feld pid basierend auf einer einfachen Berechnung hinzufügen.
Gibt es einen schnelleren Weg? Dies kostet viel Zeit.
würde mit mehreren Instanzen So (Slave/Master) es schneller machen? – mattjvincent
Master/Slave wird Ihre Schreibzeit nicht verbessern. Mongo hat nur einen Schreib-Thread und ist normalerweise durch den Datendurchsatz begrenzt, wenn Sie ein solches Update durchführen. Die "mehrere Instanzen", die Sie benötigen, sind Sharding. Mit Sharding haben Sie zwei Maschinen mit zwei separaten Festplatten und Sie erhalten fast doppelt so viel Schreibdurchsatz. Schauen Sie sich aber wieder Ihre Hardware an und vergleichen Sie diese mit Ihrem erwarteten Durchsatz. –
Ok. Ich verstehe das. Was ist mit Lesen? Gibt es eine Möglichkeit, das Lesen oder Abfragen zu beschleunigen? – mattjvincent