Verwenden des Codes:
all_reviews = db_handle.find().sort('reviewDate', pymongo.ASCENDING)
print all_reviews.count()
print all_reviews[0]
print all_reviews[2000000]
Die Zählung wird gedruckt 2043484
und es wird gedruckt all_reviews[0]
.
Beim Drucken all_reviews[2000000]
wird jedoch folgende Fehlermeldung angezeigt:
pymongo.errors.OperationFailure: Datenbankfehler: Runner-Fehler: Die gepufferte Datennutzung der Überlaufsortierungsstufe von 33554495 Byte überschreitet das interne Limit von 33554432 Byte
Wie gehe ich damit um?
quelle
db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: <limit in bytes>})
. Quelle: askubuntu.com/questions/501937/…Wie
kumar_harsh
im Kommentarbereich erwähnt, möchte ich noch einen weiteren Punkt hinzufügen.Sie können die aktuelle Puffernutzung mit dem folgenden Befehl über die
admin
Datenbank anzeigen :Der Standardwert beträgt 32 MB (33554432 Byte). In diesem Fall gehen Ihnen die Pufferdaten aus, sodass Sie das Pufferlimit mit Ihrem eigenen definierten optimalen Wert erhöhen können, z. B. 50 MB wie folgt:
Wir können dieses Limit auch dauerhaft über den folgenden Parameter in der Mongodb-Konfigurationsdatei festlegen:
Hoffe das hilft !!!
Note
: Dieser Befehl wird erst nach Version 3.0 + unterstütztquelle
mit Indizierung gelöst
quelle
Wenn Sie vermeiden möchten, einen Index zu erstellen (z. B. nur eine schnelle und schmutzige Überprüfung, um die Daten zu untersuchen), können Sie die Aggregation mit Datenträgernutzung verwenden:
(Ich bin mir jedoch nicht sicher, wie ich das in Pymongo machen soll).
quelle
db_handle.aggregate(pipe, allowDiskUse=True)
. Siehe diese Frage für weitere Informationen!JavaScript-API-Syntax für den Index:
quelle
In meinem Fall war es notwendig, notwendige Indizes im Code zu korrigieren und neu zu erstellen:
Da der Speicherüberlauf nicht auftritt, wenn ein erforderlicher Feldindex vorhanden ist.
PS Vorher musste ich die Fehler beim Erstellen langer Indizes deaktivieren:
Kann auch benötigt werden
reIndex
:quelle