使用連線池
一個。同時執行多個查詢
MySQL 連線中的所有查詢都是一個接一個地完成的。這意味著如果你想要執行 10 個查詢並且每個查詢需要 2 秒,那麼完成整個執行將需要 20 秒。解決方案是建立 10 個連線並在不同的連線中執行每個查詢。這可以使用連線池自動完成
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass',
database : 'schema'
});
for(var i=0;i<10;i++){
pool.query('SELECT ` as example', function(err, rows, fields) {
if (err) throw err;
console.log(rows[0].example); //Show 1
});
}
它將並行執行所有 10 個查詢。
當你使用 pool
時,你不再需要連線。你可以直接查詢池。MySQL 模組將搜尋下一個免費連線以執行你的查詢。
灣在託管在其上的不同資料庫的資料庫伺服器上實現多租戶
多租戶是當今企業應用程式的常見要求,不建議為資料庫伺服器中的每個資料庫建立連線池。所以,我們可以做的是建立與資料庫伺服器的連線池,然後根據需要在資料庫伺服器上託管的資料庫之間切換它們。
假設我們的應用程式為資料庫伺服器上託管的每個公司提供不同的數當使用者點選應用程式時,我們將連線到相應的公司資料庫。以下是如何執行此操作的示例: -
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
});
pool.getConnection(function(err, connection){
if(err){
return cb(err);
}
connection.changeUser({database : "firm1"});
connection.query("SELECT * from history", function(err, data){
connection.release();
cb(err, data);
});
});
讓我打破這個例子: -
在定義池配置時,我沒有給出資料庫名稱,只給出了資料庫伺服器,即
{
connectionLimit : 10,
host : 'example.org',
user : 'bobby',
password : 'pass'
}
因此,當我們想在資料庫伺服器上使用特定資料庫時,我們要求連線使用以下命令來命中資料庫: -
connection.changeUser({database : "firm1"});
你可以在這裡參考官方文件