2015-01-02 15 views
5

içinde çok fazla bağlantı hatası var. Aşağıdaki Ben düğüm mysql kullanarak yürütmeye çalışıyorum kod ama bana bu hatayı veren tutar:ER_CON_COUNT_ERROR: Node-mysql

error connecting: Error: ER_CON_COUNT_ERROR: Too many connections 

:: KOD ::

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); 
     } 
    }); 
} 

nasıl yukarıdaki kodu yeniden tasarlamalıdırlar başarıyla yürütmek için?

cevap

1

Önce 1500 öğeyi eklemek için 1500 bağlantıya ihtiyacınız yoktur. Bu kodu for döngüsünden kaldırın. Böyle

şey: Varsayılan olarak

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

MySQL sadece 100 eşzamanlı bağlantı max kabul eder. Sizin durumunuzda ~ 1500 yaratıyorsunuz, böylece aldığınız hata normaldir. Bu değeri artırabilirsiniz, ancak sorun kodunuzdadır.

Bunun yerine bir havuz kullanmalısınız. Bu düğüm bağlantıları (i varsayılan 10 olduğunu düşünüyorum) havuzu oluşturmak yapmak ve onları sorgular tarafından paylaşılmasına izin edecektir:

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(); 
      }); 
     }); 
    } 

Ayrıca tek bir bağlantı kullanarak düşünün ve her şeyi aynı anda eklemek isteyebilir. Bunu nasıl elde edeceğinizi this cevabında görebilirsiniz.