2011-05-02 7 views
1

저는 Java 기반 웹 응용 프로그램 (주로 Tomcat과 함께 배포 된 JSP)을 빌드하고 있습니다. 사용자 수는 ~ 30 명을 초과 할 수 없습니다. 작업 로그이므로 사용자는 데이터베이스 (SQL Server)를 지속적으로 업데이트/액세스합니다. 웹 응용 프로그램에는 데이터베이스에 연결해야하는 많은 메소드가 있습니다.연결 풀링 : 적절합니까?

필요할 때마다 새로운 연결을 엽니 다 (적절히 닫습니다). 그러나 이것은 연결을 많이 열고 닫는 것처럼 보입니다. 연결 풀링이이 상황에 적용됩니까? 나는 수영장의 역할을 이해하려고 노력하고 있지만 혼란 스럽다. 각 사용자에 대한 연결 풀이 있습니까?

내가 트랙에서 벗어난 경우 (나는 의심 스럽다),이 문제에 대한 더 나은 해결책이 있습니까? 심지어 문제가 있습니까?

감사합니다.

답변

1

를보십시오. 일반적으로 DB 당 하나의 풀을 사용합니다 (더 많은 이유가있을 수 있지만).

문제가 있는지 물어도 좋습니다. 연결 풀링은 협상해야하는 새 연결 수를 줄여 요청을 처리하는 데 걸리는 시간을 줄이고 서버의 부하를 줄입니다. 또한 사용되는 소켓 수를 줄여 주며, 이는 더 큰 응용 프로그램의 경우 시스템 성능의 요소가 될 수 있습니다.

그러나 해결해야 할 성능 문제가 있습니까? 응답 시간은 받아 들일 수 있습니까? 하중을 수용 할 수 있습니까? 퍼포먼스와 개발 비용의 균형을 유지하십시오. 미리 만들어진 연결 풀이 있으므로 쉽게 통합 할 수 있습니다. 그러나 자유롭지는 않으며 최적화는 일반적으로 "해야하기 때문에"특정 목표로 수행되어야합니다.

2

예. 30 개의 연결에 대해 풀 크기를 조정하고 관리하도록합니다. 그렇게하면 모든 요청에 ​​대해 연결을 여는 비용이 상각됩니다.

많은 사용자가 접속하기 위해 액세스 할 수있는 풀이 하나 있습니다. 요청 당 하나의 연결.

2

연결 풀은 응용 프로그램 용입니다 (사용자 별이 아님). 연결 풀의 개념은 열려있는 연결을 가능한 많이 재사용하고 절대적으로 필요할 때 새 연결을 여는 것입니다. 데이터베이스에 대한 연결을 열면 CPU주기와 메모리 측면에서 비용이 많이 드는 작업입니다. 그게 왜 연결 풀이 필요한지. 30 명의 사용자에게는 연결 풀 사용을 권장합니다.

풀의 15 개에서 30 개 사이의 모든 연결을 풀링 할 수 있습니다.

당신은 확실히 데이터베이스에 대한 연결을 풀 수 http://commons.apache.org/dbcp/

1

여기에 나온 포인트는 사용자 수보다 적지 만 연결을 열어야하는 요청의 수입니다. c.close() 정말 연결을 종료하지만, 그냥 풀에 다시 넣어되지 않는

당신이

for (int i = 0; i < 1000 ; i ++) { 
     Connection c = getConnection(); 
     dosomwthingWith(c); 
     c.close(); 
} 

이있는 경우 당신은 여전히, 연결 풀 도움이됩니다.