데이터베이스 풀링이란 무엇입니까?


답변:


217

데이터베이스 연결 풀링은 데이터베이스 연결을 열어 두어 다른 사람이 재사용 할 수 있도록하는 방법입니다.

일반적으로 데이터베이스 연결을 여는 것은 특히 데이터베이스가 원격 인 경우 비용이 많이 드는 작업입니다. 네트워크 세션을 열고 인증하고 권한을 확인해야합니다. 풀링은 연결을 활성 상태로 유지하여 나중에 연결이 요청 될 때 활성 연결 중 하나가 다른 연결을 만드는 데 우선적으로 사용됩니다.

다음 몇 단락에 대해서는 다음 다이어그램을 참조하십시오.

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

가장 간단한 형식으로, "실제"와 유사한 개방 연결 API 호출과 유사한 API 호출 (1)입니다. 먼저 풀에서 적절한 연결을 확인하고 (2) 사용 가능한 경우 클라이언트에 제공됩니다. 그렇지 않으면 새 것이 생성됩니다 (3).

A "에 적합한 연결은"다만 이미 하나 있다 (예 : 데이터베이스 인스턴스, 자격 증명, 그리고 아마도 다른 것들로) 올바른 정보를 사용하여 데이터베이스에 액세스 할 수 있습니다.

마찬가지로, 실제 닫기 연결을 실제로 호출하지 않고 나중에 사용하기 위해 연결을 풀 (5)에 넣는 닫기 API 호출 (4)이 있습니다. 어떤 시점에서 풀의 연결이 실제로 닫힐 수 있습니다 (6).

꽤 간단한 설명입니다. 실제 구현은 여러 서버 및 여러 사용자 계정에 대한 연결을 처리 할 수 ​​있으며, 일부 연결 기준을 미리 할당하여 일부는 즉시 준비 될 수 있으며, 사용 패턴이 조용 해지면 실제로 이전 연결을 닫을 수 있습니다.


9
멋진 작은 그래프는 어디에서 얻었습니까?
Adrian Grigore

19
나는 처음부터 그것을 만들었다. 괜찮은 그래픽을 보려면 zengr의 답변을 살펴보십시오.
paxdiablo

1
하나가 사용 가능하면 클라이언트에 제공되고 그렇지 않으면 새 것이 작성됩니다. 실제로 실제 근접 연결을 호출하지 않고 나중에 사용하기 위해 연결을 풀에 넣는 닫기 API 호출이 있습니다. 당신의 언급으로, 나는 약간의 질문이 있습니다. 1000 클라이언트가 연결을 요청했지만 닫히지 않은 경우 풀에 1000 개의 연결이 활성화되어 있습니다. 이것은 풀 성능에 좋을까요? 내 이해가 조금 잘못되었다는 것을 알려주십시오.
Ye 승리

@ 예윈, 아니 좋은 소리. 풀에 남아있는 1000 개의 연결에 대한 질문은 다시 발생할 수 있지만 일반적으로 1000 개의 동시 활성 연결이있는 특정 지점에서만 발생합니다. 그렇지 않으면 재사용이 가능하고 1000에 도달하지 못할 것입니다.이 상황과 관련하여 두 번째 단락, 특히 "사용 패턴이 줄어들 때 실제로 이전 연결을 닫을 수 있습니다"비트를 참조하십시오.
paxdiablo

1
@DiegoMariani, 손으로 한 것보다 느리게, MS Word를 더 쉽게 만들기 위해 강요하려고하는 것보다 빠릅니다 :-)
paxdiablo

105

이미지는 천 단어를 말합니다 (paxdiablo는 멋진 설명을했습니다).

대체 텍스트

출처


35
그리고 분명히 좋은 이미지 :-) 아니라 ASCII 아트의 몇 백 가지 말
paxdiablo

@sagar 가장 유용한 답변을 선택하십시오. 당신은 레코드를 수락하지 않습니다.
zengr

1
풀에서 4 개의 연결을 보았습니다. 그래서 풀링 유형에 따라이 풀에서 연결 번호가 제한됩니까 ?? 또는 풀에서 연결이 해제되지 않으면 어떻게됩니까? 클라이언트가 연결을 자유롭게 기다려야합니까 ??
Ye 승리

1
@DEADEND 실제로 연결 풀이 구현되는 방법에 따라 다릅니다. 연결이 최대 용량에 도달하면 대부분의 풀이 새 연결을 만듭니다. db가 임계 값에 도달 할 때까지 계속 증가 할 수 있습니다. 경우에 따라 (oracle jdbc와 같이) 풀 구성 중에 "초기 크기"및 "최대 크기"를 지정할 수 있습니다.
zengr

2
불행히도 이미지는 가장 중요한 것을 말하지 않습니다. 즉 , 10, 20, 30, ... 개방 된 연결 수를 유지하는 것이 필요할 때 하나의 연결을 여는 것보다 메모리 및 전체 시스템 성능에 비용이 덜 드는 이유무엇입니까? 어떻게 될 수 있습니까? 30 대 1은 덜 비쌉니까? 어떻게?
Green

16

이름에서 알 수 있듯이. 소수의 사람들이 수영을 원한다면 같은 수영장에서 수영을 할 수 있습니다. 누군가 추가 할 때마다 새로운 수영장을 건설하는 것이 합리적입니까? 시간과 비용이 우선입니다.


7

데이터베이스 연결 풀링은 데이터베이스에 대한 연결을 캐싱하여 데이터베이스에 연결할 때마다 새 연결을 설정하는 비용을 줄이기 위해 다음에 다시 사용할 수 있도록합니다.



1

연결 풀링 개념은 Java뿐만 아니라 많은 프로그래밍 언어에서 사용됩니다. 새로운 연결 객체를 생성하는 것은 비용이 많이 들기 때문에 가상 풀을 생성하는 라이프 사이클에서 고정 된 수의 연결이 유지되고 유지됩니다. Java Just ( http://javajust.com/javaques.html )는이 페이지의 질문 14를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.