npm パッケージ mysql の公式サンプル コードに関するいくつかの疑問:
まず最初のコードを見てください:
var mysql = require('mysql');
var connection = mysql.createConnection({
ホスト : 'localhost',
ユーザー : 'me',
パスワード : 'secret',
データベース : 'my_db'
});
connection.connect();
connection.query('SELECT 1 1 AS solution', function (error, results,fields) {
if (error) throw error;
console.log('解決策は次のとおりです: ', results[ 0].ソリューション);
});
connection.end();
クエリを実行した後、connection.end() を呼び出して切断することがわかります;
コードの 2 番目の部分を見てください:
var mysql = require('mysql' ) ;
var プール = mysql.createPool(...);
pool.getConnection(function(err, connection) {
// 接続を使用します
connection.query('SELECT something FROM sometable', function (error, results, field) {
});
});
クエリの完了後に呼び出されます: connection.release();
質問 1 これら 2 つのコードの場合:
最初の段落は
connection.end(); を呼び出しません
2 番目の段落は
connection.release();## を呼び出しません# が発生すると、どのような結果が生じますか?
2.この 2 つの違いは何ですか?
3. これら 2 つのコードの違いは何ですか? この接続プールを理解するにはどうすればよいですか?
個人的な理解: 接続プールはキャッシュとして理解できますか? 特定のデータをクエリした後、同じデータに対する 2 番目のクエリはキャッシュ、つまりプールから直接取得されます。
1. 複数の接続で同時にレコードを操作することはできないため、データベースの操作は同期的にブロックされる必要があります。データベースを操作するには、まず接続を確立する必要があり、データベースでは無制限に接続が許可されません。複数の接続の確立。接続操作が完了しても接続が切断または解放されない場合、後続の接続の確立と使用に影響を与えるため、同時実行性が高い状況では回避する必要があります。
2. connection.end() と connection.release() の関数は現在の接続を解放するものですが、前者は通常の接続用であり、後者は接続プール用です。
3. 接続プールにはキャッシュ機能がありますが、キャッシュされるのは特定の操作によって取り出される特定のデータではなく、キャッシュされた接続そのものです。これにより、次回データベースを操作するときに必要なくなります。接続を常に確立したり破棄したりするためです。