Einige Zweifel am offiziellen Beispielcode des npm-Pakets mysql:
Erster Blick auf den ersten Code:
var mysql = require('mysql');
var Connection = mysql.createConnection({
host : 'localhost',
user : 'me',
Passwort: 'secret',
Datenbank: 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS-Lösung', Funktion (Fehler, Ergebnisse, Felder) {
if (error) throw error;
console.log('Die Lösung ist: ', Ergebnisse[0].solution) ;
});
connection.end();
Nachdem Sie die Abfrage gesehen haben, rufen Sie connect.end() auf, um die Verbindung zu trennen.
var mysql = require('mysql');
var pool = mysql.createPool ( ...);
// Verbindung verwenden
Connection.query('SELECT Something FROM Sometable', Function (Error, Results, Fields) {
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) throw error;
// Don't use the connection here, it has been returned to the pool.
});});
Frage 1 Wenn diese beiden Codeteile:
Der erste Teil ruft nicht
connection.end();
Der zweite Teil ruft nicht
connection.release(); auf.
Was sind die Konsequenzen?
2. Was ist der Unterschied zwischen den beiden?
3. Was ist der Unterschied zwischen diesen beiden Codeteilen?
Persönliches Verständnis: Kann der Verbindungspool als Cache verstanden werden? Nach der Abfrage eines bestimmten Datenelements wird die zweite Abfrage für dieselben Daten direkt aus dem Cache, also aus dem Pool, abgerufen
1、对数据库的操作一定是同步阻塞的,因为决不允许多个连接同时操作一条记录这种情况的发生,想要操作数据库,必须要先建立连接,而数据库也不允许无限制的建立多个连接,如果某个连接操作完不断开或释放连接,就会影响到后续连接的建立和使用,这对于高并发的情况是需要避免的。
2、connection.end()和 connection.release()的作用都是释放当前连接,但对象不同,前者针对的是普通的连接,而后者针对的连接池。
3、连接池确实有缓存的作用,但是其缓存的不是某条操作取出的具体数据,而是缓存的连接本身,这样当下次操作数据库时就不再需要不停的建立连接和销毁连接了。