2017-10-15 21 views
2

HikariCP와 같은 SQLite, H2 또는 HSQLDB와 같은 내장 데이터베이스를 사용하면 어떤 장점이 있습니까? (마지막 두 가지는 서버 모드에서도 실행될 수 있지만 그다지 관심이 없습니다.)내장 데이터베이스가있는 JDBC 연결 풀을 사용할 때 이점이 있습니까?

퍼베이시브 데이터베이스에서는 무시할 수있는 성능 이점 외에도 코드를보다 간결하고 강력하게 만들 수있는 연결 풀

저는이 질문이 this other one과 다르다는 점에서 임베디드 데이터베이스와 히카리 CP에 초점을 맞추기 때문에 더 구체적이라고 생각합니다.

+0

[연결 및 명령문 풀링의 이점은 무엇입니까?] (https : // stackoverflow.com/questions/457287/what-of-the-the-of-the-connection-and-statement-pooling) – shinjw

답변

5

연결 풀은 처음부터 새 연결을 여는 것은 비용이 많이 드는 작업입니다 주로하기 때문에 존재한다. 일반적으로 TCP/IP 핸드 셰이크, 암호화 및 프로토콜 협상 및 인증이 필요합니다. 연결을 닫을 때 약간의 오버 헤드가 있습니다.

이렇게 궁극적으로 구현에 이릅니다. 재사용을 보장 할 정도로 느린 새 연결을 여는 중입니까? 연결 풀은 연결을 여는 데 걸리는 총 시간이 다른 작업에 소요되는 시간보다 크거나 연결을 여는 경우 중요한 대기 시간이 발생하는 경우에 적합합니다. 임베디드 데이터베이스의 경우 프로그램 자체와 동일한 메모리 공간에서 실행되므로 차이가 최소화되어야합니다.

그러나 연결 풀은 최대 동시 연결 수를 제한하기 때문에 유용한 부작용이 있습니다. 연결 풀링 기능이없는 서버에서 공격자는 쉽게 대량의 요청을 보내 메모리를 소모하거나 서비스 거부를 일으킬 수 있습니다.

코드 투명성과 추상화의 관점에서 볼 때 연결 풀은 완전히 투명하기 때문에 연결 풀도 좋습니다. 언젠가 임베디드에서 클라이언트/서버로 이동하기로 결정한다면 아무 것도 변경할 필요가 없습니다.

+0

좋은 답변, 특히 리소스를 제한하는 측면. – brettw

1
나는 하나의 경우를 생각할 수

,

당신이 개발 임베디드 데이터베이스 및 생산 하지 포함 된 데이터베이스

에 사용하는 경우 임베디드 데이터베이스 프로젝트

의 개발 단계에서 유용

그런 다음 코드 변경없이 다른 데이터베이스와 연결 풀링에 동일한 코드를 재사용 할 수 있습니다 (종속성 삽입 사용).

Spring 경우 두 번째 옵션을 선택합니다

봄 JDBC의 임베디드 데이터베이스 지원은 두 가지 방법으로 확장 할 수 있습니다

:

  1. 아파치와 같은 새로운 임베디드 데이터베이스 유형을 지원하기 위해 EmbeddedDatabaseConfigurer 구현 더비.

  2. 임베디드 데이터베이스 연결을 관리하기 위해 연결 풀과 같은 새 DataSource 구현을 지원하도록 DataSourceFactory를 구현합니다.