2017-05-18 4 views
0

Ich versuche, Maxmind Opensource-Datenbank in meiner Nodejs-Anwendung zu öffnen. Meine Anwendung erhält eine Liste von IP-Adressen aus einer Java-Anwendung. Die Anwendung gibt dann den Längen- und Breitengrad für jede IP zurück. Ich habe das synchron erfolgreich gemacht, aber ich möchte es asynchron machen, um die Dinge etwas schneller zu machen. Ich habe einen Code dafür geschrieben, aber die Anwendung wird jedes Mal getötet. Ich vermute, dass der Grund für das gleichzeitige Öffnen derselben Datenbank sein könnte (ich könnte mich irren: D). Ich poste den Code unten. Bitte werfen Sie einen Blick darauf und machen Sie Vorschläge, wo ich falsch liege. Vielen Dank!!!Öffnen von Maxmind DB in Nodejs

app.post('/endPoint', function(req, res){ 
var obj = req.body; 
var list = []; 
var ipList = obj.ipList; 
for(var i = 0; i<ipList.length; i++){ 
var ip = ipList[i]; 
//console.log(i); 
maxmind.open('./GeoLite2-City.mmdb', function(err, cityLookup){ 
if(err) throw err; 
console.log("open database"); 
var city = cityLookup.get(ip); 
if(city!=null){ 
var cordinates = {'latitude': city.location.latitude, 'longitude': geodata.location.longitude}; 
     //console.log(cordinates); 
     list.push(cordinates); 
     } 
     if(list.length == ipList.length){ 
     res.json({finalMap: list}); 
     } 
}); 
} 
}); 

Antwort

0

Sie sollten die Datenbank nur einmal öffnen und erneut verwenden.

wäre die einfachste Lösung zu sein synchron die Datenbank am Anfang der Datei öffnen:

const maxmind = require('maxmind'); 
const cityLookup = maxmind.openSync('./GeoLite2-City.mmdb'); 

es asynchron Lesen nicht die Dinge beschleunigen würde eine ganze Menge, und weil das Laden der Datenbank erfolgt Nur einmal (während des Starts der App) denke ich nicht, dass es eine große Sache ist, dass es die Ereignisschleife für ein paar Sekunden vorübergehend blockiert.

Und verwenden Sie die cityLookup Funktion in Ihrem Request-Handler:

app.post('/endPoint', function(req, res) { 
    ... 
    let city = cityLookup.get(ip); 
    ... 
}); 
+0

Hey !! Danke für die Antwort. Es funktionierte wirklich schneller, indem die Datenbank ein einziges Mal geöffnet wurde. –

Verwandte Themen