2014-04-19 3 views
1

간단한 스레드 풀 고려. 스레드 풀의 주요 목적은 최대 스레드 수를 제한하고 스레드 제거 및 생성을 방지하기 위해 스레드 재사용 (재활용)입니다. 맞습니까?
최근에 나는 Java EE에서 데이터베이스 연결이 서버에 의해 풀링되었지만 왜 그럴 수 없는지 (위키 백과 연결 풀)을 읽었 는가?
질문 :
데이터베이스 연결 풀 용도?

  • 자바의 SQL 연결 풀링의 주요 목적은 무엇인가?
  • 128 개의 연결을 풀링하고 모두 열어 둘 수 있습니까?
  • 128 개의 동시 선택 명령이 하나의 연결 또는 128 연결에서 실행되는 경우의 차이점은 무엇입니까?
  • 연결 풀을 통해 데이터베이스에 연결하는 올바른 방법은 무엇입니까?
  • 서버와 데이터베이스가 어떻게 연결을 처리합니까?
  • 서버가 닫힌 연결을 어떻게 다시 사용합니까?
  • 전체 서버 구성 요소가 공유 연결을 사용하는 경우에도 풀이 필요합니까?

미리 감사드립니다.

+0

데이터베이스 연결은 데이터베이스 * 클라이언트에 의해 풀링됩니다. * J2EE 서버는 데이터베이스의 클라이언트입니다. – EJP

+0

@EJP 좋은 지적으로, 나는 또한 'MS SQL Server'내에 연결 풀 구성도 발견 했으므로 서버와 관련이 있습니까? 또는 관리 스튜디오? –

답변

2

데이터베이스 연결 풀링 해결은 여기에서 언급 한 스레드 풀링과 매우 유사합니다. 다음은 주요 이유입니다. DB를 연결 풀의

  • 주요 목적은 어떤 DB 연결을 생성하고 풀에 보관하고 응용 프로그램 코드가 DB에 쿼리를 실행해야 할 때마다 재사용하는 것입니다. 연결을 만들면 비용이 많이 드는 작업이므로 연결 풀링을 사용하면 에 해당 작업을 저장할 수 있습니다.
  • 128 개의 연결을 만들어 풀에 보관하는 것이 완벽합니다.
  • 한 연결에서 128 개의 동시 선택이 제대로 작동하지 않을 수 있습니다. 연결 풀링을 사용하면 풀에서 연결을 가져오고이 풀을 사용하여 작업에 필요한 모든 쿼리를 실행 한 다음 연결을 다시 풀로 반환합니다. 따라서 에는 동시 선택을 실행하는 데 128 개의 연결이 필요합니다.
  • 일반적으로 컨테이너에 연결 풀링을 처리하게합니다. web.xml 또는 컨테이너 에서 연결 풀링을 구성하고 JNDI 이름을 풀에 연결된 데이터 소스 과 연관시킬 수 있습니다. 그런 다음 DataSource와 에서 연결을 가져옵니다. 다음은 연결을위한 예제 코드입니다.
public static Connection getConnection() { 
     Connection con = null; 
     try { 
      Context initContext = new InitialContext(); 
      Context envContext = (Context) initContext.lookup("java:/comp/env"); 
      DataSource dataSource = (DataSource) envContext.lookup("jdbc/db"); 
      con = dataSource.getConnection(); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return con; 
    } 
  • 데이터베이스 연결이 아직 살아 있다고 가정하고 응용 프로그램 서버의 그것 책임으로 구성하여 (물론 살아 에 풀을 연결을 유지하기 위해 사용자)로 연결하고 연결 시간 초과를 피하십시오.

  • 응용 프로그램 코드에서 connection.close()를 호출하여 연결을 닫을 것을 요청하면이 연결은 닫히지 않고 실제로 풀로 반환되어 풀의 연결에 대한 추가 요청에서이 연결을 사용합니다.

  • 모든 웹 응용 프로그램의 경우 연결 풀을 만드는 것이 좋습니다. 그렇지 않으면 성능과 관련된 문제가 발생하고 너무 많은 연결이 열립니다.
+0

그래서 각 서블릿 요청에 대한 연결 풀에서 새로운 연결을 가져온 다음 닫으십시오 (요청 범위). –

+0

예. 위의 대답에서 언급 한 것처럼 연결을 닫을 때 연결을 실제로 닫지 않고 풀로 돌아갑니다. – jindal

+0

"128 개의 연결을 만들어 풀에 보관하는 것이 좋습니다." 그것에 대해 아무 문제가 없습니다. 데이터베이스는 128 개의 동시 작업을 처리 할 수 ​​없으므로 결국 DB 서버의 리소스가 소모 될 수 있습니다. 이렇게하면 128 개의 모든 연결이 끊어 지므로 시스템을 사용자가 사용할 수 없게됩니다. – Kayaman