2016-08-22 28 views
1

Ich habe eine Anwendung in Node.JS, die im Grunde alle 30 Minuten einen Snapshot von Daten aus einer WebAPI abruft. Wenn ich versuche, die Datenbank mithilfe einer Sammelanfrage abzufragen, löst die App einen Fehler im Zusammenhang mit dem Timeout aus (MongoError: Verbindung 1 zu 127.0.0.1:27017 ist abgelaufen). Aus meinen Logs sehe ich, dass es genau 30 Sekunden sind. Das Aggregat Abfrage so etwas wie diese:MongoDB Timeout-Problem (Node.js)

collection.aggregate([{ 
      "$group": { 
       "_id": { 
        country: "$country", 
        user: "$user" 
       } 
      } 
     }]). 

ich die Abfrage auf einem anderen Client getestet (aber dieselbe Datenbank) und es dauert ca. 60 Sekunden für 25.000.000 Datensätze. Meine Annahme ist, dass es einen Timeout-Parameter mit dem Wert von 30 Sekunden gibt, die meine Anwendung blockiert, die Abfrage zu beenden. Kann mir jemand sagen, wie ich diesen Parameter in Node.JS einstellen kann? Ich benutze 'mongodb' js Bibliothek und meine Host-Maschine ist Windows.

Da dies ein persönliches Projekt ist, wollte ich untersuchen, wie ich MongoDB anstelle einer traditionelleren Lösung wie Oracle oder MySQL verwenden kann, aber dies könnte ein Deal Breaker sein, da Analytik ein Kernteil der gesamten Anwendung ist.

+0

"Die App löst einen Fehler im Zusammenhang mit Timeout" klingt ein bisschen vage. Wie sieht genau dieser Fehler aus? Woher kommt das? – pdenes

+0

der Fehler ist dies: MongoError: Verbindung 1 zu 127.0.0.1:27017 Zeitüberschreitung – Bogdan

Antwort

4

Ich fand eine Lösung in dieser Antwort: "Server x timed out" during MongoDB aggregation.

Grundsätzlich sieht die Verbindungszeichenfolge wie folgt nun:

this.server = 'mongodb://127.0.0.1:27017/test?socketTimeoutMS=90000'; 

Die socketTimeoutMS den Trick und ich habe nicht mehr die Verbindung Timeout-Fehler.