Maison > Questions et réponses > le corps du texte
Quelques doutes sur l'exemple de code officiel du package npm mysql :
Premier coup d'œil au premier code :
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'moi',
mot de passe : 'secret',
base de données : 'my_db'
});
connexion.connect();
connection.query('SELECT 1 + 1 AS solution', function (erreur, résultats, champs) {
if (error) throw error;
console.log('La solution est : ', results[0].solution) ;
});
connection.end();
Après avoir vu la requête, appelez connection.end() pour vous déconnecter
Regardez le deuxième morceau de code :
var mysql = require('mysql');
var pool = mysql.createPool ( ...);
pool.getConnection(function(err, connection) {
// Utiliser la connexion
connection.query('SELECT Something FROM sometable', function (erreur, résultats, champs) {
// 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.
});
});
Appelez une fois la requête terminée : connection.release();
Question 1 Si ces deux morceaux de code :
Le premier morceau n'appelle pas
connection.end();
Le deuxième morceau n'appelle pas
connection.release();
Quelles seront les conséquences ?
2. Quelle est la différence entre les deux ?
3. Quelle est la différence entre ces deux morceaux de code ?
Compréhension personnelle : le pool de connexions peut-il être compris comme un cache ? Après avoir interrogé une certaine donnée, la deuxième requête pour les mêmes données est directement récupérée du cache, c'est-à-dire du pool ;
phpcn_u15822017-05-19 10:10:39
1. Les opérations sur la base de données doivent être bloquées de manière synchrone, car plusieurs connexions ne sont jamais autorisées à exploiter un enregistrement en même temps. Si vous souhaitez exploiter la base de données, vous devez d'abord établir une connexion, et la base de données ne permet pas un établissement illimité. . Connexions multiples, si une opération de connexion est terminée et que la connexion n'est pas déconnectée ou libérée, cela affectera l'établissement et l'utilisation des connexions ultérieures, ce qui doit être évité dans les situations de concurrence élevée.
2. Les fonctions de connection.end() et connection.release() sont de libérer la connexion actuelle, mais les objets sont différents, le premier est destiné aux connexions ordinaires, tandis que le second est destiné aux pools de connexions.
3. Le pool de connexions a une fonction de cache, mais ce qu'il met en cache, ce ne sont pas les données spécifiques extraites par une certaine opération, mais la connexion mise en cache elle-même, de cette façon, la prochaine fois que vous utiliserez la base de données, vous n'en aurez plus besoin. pour établir et détruire constamment des connexions.