2015-01-02 11 views
5

Ich bin ein Anfänger Knoten. Im Anschluss ist der Code, den ich versuche, mit Knoten mysql auszuführen, aber es hält mir diesen Fehler geben:ER_CON_COUNT_ERROR: Zu viele Verbindungsfehler in Knoten-Mysql

error connecting: Error: ER_CON_COUNT_ERROR: Too many connections 

:: CODE ::

var size = item.length;// size is ~1500 
for (var i=0; i<size;i++) { 
    var connection = mysql.createConnection({ 
     host  : 'xxx.xxx.xxx.xxx', 
     database : 'mydb', 
     user  : 'test', 
     password : 'test' 
    }); 

    connection.connect(function(err, callback) { 
     if (err) { 
      console.error('error connecting: ' + err.stack); 
      return; 
     } 
    }); 

    var entry = { 
     id: item[i], 
     time_created: Math.floor(Date.now()/1000), 
     time_created: Math.floor(Date.now()/1000), 
     price_range: 0 
    }; 


    var query = connection.query('INSERT INTO mytable SET ?', entry, function(err, result, callback) { 
     if(err) { 
      console.log(err.message); 
     } 
    }); 

    connection.end(function(err) { 
     if(err) { 
      console.log(err.message); 
     } 
    }); 
} 

Wie soll ich Neukonstruktion den obigen Code um es erfolgreich auszuführen?

Antwort

1

Zuerst brauchen Sie keine 1500 Verbindungen, um 1500 Elemente einzufügen. Entfernen Sie diesen Code aus Ihrer for-Schleife.

Etwas wie folgt aus:

var size = item.length;// size is ~1500 
var connection = mysql.createConnection({ 
    host  : 'xxx.xxx.xxx.xxx', 
    database : 'mydb', 
    user  : 'test', 
    password : 'test' 
}); 

connection.connect(function(err, callback) { 
    if (err) { 
     console.error('error connecting: ' + err.stack); 
     return; 
    } 
}); 

connection.end(function(err) { 
    if(err) { 
     console.log(err.message); 
    } 
}); 

for (var i=0; i<size;i++) { 
    var entry = { 
     id: item[i], 
     time_created: Math.floor(Date.now()/1000), 
     time_created: Math.floor(Date.now()/1000), 
     price_range: 0 
    }; 


    var query = connection.query('INSERT INTO mytable SET ?', entry, function(err, result, callback) { 
     if(err) { 
      console.log(err.message); 
     } 
    }); 
}; 
4

standardmäßig MySQL akzeptiert nur 100 gleichzeitige max Verbindungen. In deinem Fall erstellst du ~ 1500, also ist der Fehler, den du bekommst, normal. Sie können diesen Wert erhöhen, aber das Problem liegt in Ihrem Code.

Sie sollten stattdessen einen Pool verwenden. Dadurch wird Knoten einen Pool von Verbindungen schaffen (ich glaube, die Standard-10) und lassen Sie sie durch Ihre Anfragen geteilt werden:

var mysql = require('mysql'); 
    var pool = mysql.createPool({ 
     host  : 'xxx.xxx.xxx.xxx', 
     database : 'mydb', 
     user  : 'test', 
     password : 'test' 
    }); 
    for (var i=0; i<size;i++) { 
     pool.getConnection(function(err, connection) { 
      connection.query('INSERT INTO ...', function(err, rows) { 
      connection.release(); 
      }); 
     }); 
    } 

Auch können Sie mit einer einzigen Verbindung betrachten und alles auf einmal einfügen. Sie können in this Antwort sehen, wie man das erreicht.