2017-02-16 1 views
0

Von mongodb Java-Treiber Dokumentation unterMongoDB Java Driver: Fetching Aufzeichnungen einen Cursor

https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-ii

Es sagt folgendes über die Cursor in den Java-Treiber verwenden.

Der Cursor ruft die Ergebnisse in Stapeln aus der Datenbank ab. Wenn Sie also eine Abfrage ausführen, die mit vielen Dokumenten übereinstimmt, müssen Sie nicht befürchten, dass jedes Dokument sofort in den Speicher geladen wird. Bei den meisten Abfragen ist der erste zurückgegebene Stapel 101 Dokumente. Wenn Sie jedoch über den Cursor iterieren, ruft der Treiber automatisch weitere Stapel vom Server ab. Sie müssen sich also nicht darum kümmern, die Stapelverarbeitung in Ihrer Anwendung zu verwalten. Aber Sie müssen sich darüber im Klaren sein, dass Sie, wenn Sie über den gesamten Cursor iterieren (zB um ihn in eine Liste zu setzen), alle Ergebnisse abrufen und in den Speicher setzen.

Ich finde es sehr verwirrend. Zuerst heißt es: "Wenn Sie über den Cursor iterieren, holt der Treiber automatisch weitere Stapel vom Server", was sinnvoll ist, da Sie nicht möchten, dass Ihr lokaler Speicher in die Luft geht. Es folgt jedoch mit einer widersprüchlichen Aussage, die im Grunde sagt, wenn Sie dann über den gesamten Cursor iterieren, würde der Treiber alle Datensätze von dem Server in Ihrem lokalen Speicher auf einmal ablegen.

Ich kann nicht verstehen, wie unterschiedlich diese beiden Aussagen sind. Was ist der Unterschied zwischen der Iteration über einen Cursor und der Iteration über den gesamten Cursor?

Ich würde gerne wissen, wie genau Cursor hier arbeiten und was die effizienteste Möglichkeit ist, über einen Cursor zu iterieren, so dass alle Datensätze vom Server nicht in den lokalen Speicher auf einmal Speicherverlust verursacht werden.

Antwort

0

Ich denke, es auf diese Weise zu verstehen ist:

Iterierte = holen Dokument, zu verarbeiten, das nächste Dokument holen ...

Iterierte ganze = Dokument holen, fügen geholt Dokument zur Liste, fetch next document ... Wenn alle Dokumente abgerufen wurden, verarbeiten Sie alle Dokumente in der Liste

Verwandte Themen