javascript – Einige Probleme mit dem MySQL-Modul, bezüglich Verbindungspools
淡淡烟草味
淡淡烟草味 2017-05-19 10:08:39
0
1
555

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

pool.getConnection(function(err, Connection) {

// 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. 

});

});

Aufruf nach Abschluss der Abfrage: Connection.release();

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

淡淡烟草味
淡淡烟草味

Antworte allen(1)
phpcn_u1582

1、对数据库的操作一定是同步阻塞的,因为决不允许多个连接同时操作一条记录这种情况的发生,想要操作数据库,必须要先建立连接,而数据库也不允许无限制的建立多个连接,如果某个连接操作完不断开或释放连接,就会影响到后续连接的建立和使用,这对于高并发的情况是需要避免的。
2、connection.end()和 connection.release()的作用都是释放当前连接,但对象不同,前者针对的是普通的连接,而后者针对的连接池。
3、连接池确实有缓存的作用,但是其缓存的不是某条操作取出的具体数据,而是缓存的连接本身,这样当下次操作数据库时就不再需要不停的建立连接和销毁连接了。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage