Ich speichere Buch Metadaten wie Name, Autoren, Preis, Verlag, etc. in einem Mongodb-Dokument. Ich habe ungefähr 10 Millionen dieser Dokumente und sie alle sind in einer Sammlung. Die durchschnittliche Dokumentgröße beträgt 1,9 KB. Jetzt habe ich Indizes auf name
, authors
und price
. In der Tat Ich habe 2 Indizes auf Preis eins in aufsteigender Reihenfolge und einer absteigenden Reihenfolge. Meine mongodb-Version ist 2.2.0 und ich benutze den php-Treiber, um mongo abzufragen. Die Treiberversion ist 1.12. Aber wenn ich eine Bereichsabfrage zum Preis mache, bekomme ich eine MongoCursorTimeoutException
. In meiner Anfrage versuche ich Bücher in einer bestimmten Preisklasse wie "Preis unter 1000 und mehr als 500" zu finden.Abfrage auf 10 Millionen Mongodb-Dokumente
Das Timeout zu erhöhen scheint keine gute Idee zu sein (es ist bereits 30 Sekunden). Gibt es noch etwas, was ich tun kann, um den Abfrageprozess zu beschleunigen?
BEARBEITEN Eigentlich ist mein Preisindex zusammengesetzt. Ich habe ein Statusfeld, das einen ganzzahligen Wert hat, so dass mein Preisindex wie {price:-1,status:1}
und {price:1,status:1}
aussieht Ich versuche auch, 20 Dokumente gleichzeitig mit PHP abzurufen.
memcached? das sind 18 Gigs, kein Wunder. Wie viel Speicher hast du installiert? – nullpotent
@iccthedral Ich habe 8 GB RAM. Aber meine Gesamtindexgröße beträgt ca. 6 GB. So habe ich genug Speicher, um meine Indizes im RAM zu halten – lovesh
Mit separaten aufsteigenden und absteigenden Indizes auf Preis ist eine Verschwendung. Richtung [spielt keine Rolle] (http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeys) für Einzelfeldindizes. Entfernen Sie eine von ihnen, um etwas Index-RAM freizugeben. – JohnnyHK