npm 패키지 mysql의 공식 샘플 코드에 대한 몇 가지 의심:
첫 번째 코드를 먼저 살펴보세요:
var mysql = require('mysql');
var 연결 = mysql.createConnection({
호스트 : 'localhost',
user : '나',
비밀번호 : '비밀',
데이터베이스 : 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS 솔루션', 함수(오류, 결과, 필드) {
if(오류) throw error;
console.log('솔루션은 ', results[0].solution) ;
});
connection.end();
쿼리를 확인한 후 연결을 끊으려면 Connection.end()를 호출하세요.
두 번째 코드 부분을 살펴보세요.
var mysql = require('mysql')
var pool = mysql.createPool( ...);
pool.getConnection(function(err,connection) {
// 연결 사용
connection.query('SELECT Something FROM sometable', function(error, results, fields) {
});
});
쿼리 완료 후 호출: Connection.release();
질문 1 다음 두 코드가 있는 경우:
첫 번째 부분은
connection.end();를 호출하지 않습니다.
두 번째 부분은
connection.release();를 호출하지 않습니다.
어떤 결과가 발생합니까?
2. 둘의 차이점은 무엇인가요?
3. 이 두 코드의 차이점은 무엇인가요?
개인적인 이해: 연결 풀을 캐시로 이해할 수 있습니까? 특정 데이터가 쿼리되면 동일한 데이터가 두 번째로 캐시, 즉 풀에서 검색됩니다.
1. 여러 연결이 동시에 레코드를 작동할 수 없으므로 데이터베이스에 대한 작업은 동기적으로 차단되어야 합니다. 데이터베이스를 작동하려면 먼저 연결을 설정해야 하며 데이터베이스는 그렇지 않습니다. 연결을 허용하지 마십시오. 다중 연결 설정을 제한하십시오. 연결 작업이 완료되고 연결이 끊어지거나 해제되지 않으면 후속 연결 설정 및 사용에 영향을 미치므로 동시성이 높은 상황에서는 이를 피해야 합니다.
2.connection.end()와 Connection.release()의 기능은 현재 연결을 해제하는 것이지만 전자는 일반 연결을 위한 것이고 후자는 연결 풀을 위한 것입니다.
3. 연결 풀에는 캐시 기능이 있지만 캐시하는 것은 특정 작업으로 가져온 특정 데이터가 아니라 캐시된 연결 자체입니다. 더 이상 지속적으로 연결을 설정할 필요가 없으며 연결이 끊어집니다.