2016-07-28 18 views
3

Aktuelle Dokumente, die ich holen, indem sie in pymongo durch Cursor laufen, zum Beispiel:Wie schnell alle Dokumente holen MongoDB pymongo

for d in db.docs.find(): 
    mylist.append(d) 

Als Referenz ein fetchall auf dem gleichen Satz von Daten (7m Datensätze) nimmt um die Durchführung 20 Sekunden, während die obige Methode ein paar Minuten dauert.

Gibt es eine schnellere Möglichkeit, Massendaten in Mongo zu lesen? Entschuldigung, ich bin neu bei Mongo, bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden.

Antwort

3

Durch die Verwendung von $ natural sort wird der Index umgangen und die Dokumente werden in der Reihenfolge zurückgegeben, in der sie auf der Festplatte gespeichert sind. Dies bedeutet, dass Mongo nicht mit zufälligen Lesevorgängen auf Ihrer Festplatte umgehen muss.

https://docs.mongodb.com/manual/reference/method/cursor.sort/#return-natural-order

Die Leistung wird stark beeinträchtigt, wenn Sie eine Abfrage verwenden möchten. Sie sollten sich niemals auf FIFO-Bestellungen verlassen. Mongo ermöglicht es, Dokumente innerhalb der Speicherebene zu verschieben. Wenn dir die Reihenfolge egal ist, sei es so.

Diese Reihenfolge ist eine interne Implementierung Funktion, und Sie sollten nicht auf eine bestimmte Struktur verlassen innerhalb i

for d in db.docs.find().sort({ $natural: 1 }): 
    mylist.append(d) 

in Python, Sie wollen auch eine EXHAUST Cursor-Typ verwenden, die Fordert den Mongo-Server auf, die Ergebnisse zurückzustreamen, ohne darauf zu warten, dass der Pymongo-Treiber jede Charge bestätigt

https://api.mongodb.com/python/current/api/pymongo/cursor.html#pymongo.cursor.CursorType.EXHAUST

Wohlgemerkt, es wird nie so schnell wie die Shell sein. Der langsamste Aspekt beim Verschieben von Daten zwischen mongo/bson-> pymongo-> ist die UTF8-String-Decodierung in Python.

+0

Danke, mit der natürlichen Flagge auf jeden Fall hilft zu machen. –

0

Sie benötigen nur eine Besetzung mit list() Funktion

pymongo_cursor = db.collection.find() 
all_data = list(pymongo_cursor) 
Verwandte Themen