Akashic Records

JDBC driver types 본문

오래된글/Java

JDBC driver types

Andrew's Akashic Records 2018. 4. 7. 22:59
728x90

JDBC driver types

JDBC driver는 크게 4가지 타입으로 나누어진다. 각각의 타입에 따라서, JDBC드라이버의 구현방법이 다르며, System independent, performance 등에 기본적으로 차이를 보인다. 일반적으로 상위 타입으로 갈수록 perfomance와 independent가 증가한다고 생각하면 된다. JDBC driver의 4가지 타입은 아래와 같다.

  • Type 1 : JDBC-ODBC Bridge

  • Type 2 : Native_API/partly Java driver

  • Type 3 : Net-protocol/all-Java driver

  • Type 4 : Native-protocol/all-Java driver

Type 1 : JDBC-ODBC Bridge

첫번째 타입의 JDBC 드라이버인 JDBC-ODBC Bridge는, JDBC에 들어온 모든 명령을 ODBC(Microsoft Open Database Connectivity)형으로 변환하여, ODBC 드라이버로 전달해준다. 이때 주의할점은, JDBC를 사용하는 Application과, JDBC와 브릿지로 연결된, ODBC드라이버는 하나의 시스템에 같이 존재해야한다.

장점

JDBC-ODBC드라이버는 ODBC 드라이버가 풍부하기 때문에, 거의 대부분의 데이터베이스 시스템에서 사용할 수 있으며, JDBC-ODBC 드라이버를 사용하는 클라이언트에 미리 ODBC드라이버가 설치되어 있는 경우에 매우 유용하게 사용할 수 있다.

단점

  • 우선 속도면에서 문제가 있다. JDBC를 통해서 호출된 명령이 다시 ODBC를 통해서 나가야 하기 때문에, 두개의 브릿지를 거치기 때문에, 빠른 속도를 내기 어렵다. 빠른 성능을 요구하는 애플리케이션의 경우에는 Type 1. JDBC-ODBC 브릿지는 적당하지 않다.

  • JDBC-ODBC 브릿지를 사용하는 시스템에는 반드시, 해당 데이터베이스에 연결하기 위한, ODBC 드라이버가 설치되어야한다. 이 단점은, 애플릿에서 JDBC를 사용하여 프로그래밍하는 경우에, 많은 문제가 되는데, 애플릿을 이용해서, JDBC-ODBC를 사용할 경우에, 애플릿을 다운 받은, 클라이언트에, 미리 해당 ODBC 드라이버가 설치되어 있어야 하기 때문에, 배포등에 많은 문제가 생기게 된다.

Type 2: Native-API/partly Java driver

JDBC driver type 2 – the native API/partly Java driver – JDBC에 들어온 호출내용은 Oracle,Informix,Sybase 등과 같이 각각의 DBMS 시스템의 시스템 호출에 맞춰서 변환하여,명령을 전달하는 방법이다. DBMS와 연결되는 부분은 C/C++ 과 같은 Native Code로 작성되어 있고, 이 Native 부분과 연결하여, Java로 Wrapping 해서 JDBC 드라이버를 구현한다.

개념적으로 생각해보면, Type 1의 ODBC 부분이 각 vendor에서 제공하는 Native library로 바뀌었다고 생각하면 된다.

장점

데이터베이스와 연결되는 부분이 Native code로 구현되어 있는 만큼 JDBC-ODBC 브릿지에 비해서 빠른 속도를 제공한다.

단점

Type2드라이버 역시, JDBC드라이버를 사용하고자 하는 각각의 클라이언트에, DBMS Vendor의 데이터베이스 라이브러리가 로드 되어야 하기 때문에, 인터넷이나 CS환경에서는 사용하기 적합하지 않다. 또한 Type 3,4 드라이버에 비해서 낮은 성능을 제공한다.

Type 3 : Net-protocol / all-Java driver

Type 3 JDBC 드라이버의 구조는 3Tiers Client Server 모델을 따르고 있다. JDBC 드라이버를 통해서, Database Command를 내리면, JDBC 드라이버는 그 Command를 변경하지 않고, 그대로 Middleware (Database Access Server)로 전송한다. Middleware 에서는 데이터베이스에 맞는 명령어로 변환하여, 데이터베이스에 Command를 전송한후 그 결과 값을 받아서 다시 JDBC 드라이버에게로 전송하게 된다.

이때 Middleware가 Java로 구현되어 있을 경우에, Database와 Middleware를 연결하는 부분은 Type 1 or Type 2 JDBC 드라이버를 사용하기도 한다.

장점

데이터베이스 접근을 Middleware를 통하기 때문에, 각각의 Client에 Database 별도로 Native Lib 또는 ODBC 드라이버를 설치할 필요가 없다. 중간에서 Middleware로 데이터베이스 연결을 통재하기 때문에, performance,scalability,portability 등을 최적화 시킬 수 있다. Middleware 부분에, Connection을 관리하는 기법이나, Resultset을 Caching하는 기법등을 사용하면 큰 성능향상을 볼 수 있으며, 기본적으로 3Tiers C/S 모델을 취하고 있기 때문에, 추후에, 업그레이드나 교체 확장등이 매우 용이하다.

단점

중간에 Middleware 서버를 구현해야 하며, Middleware에서 연결하고자 하는 데이터베이스 vendor별로 연결 부분을 제작해줘야한다. Middleware가 자바로 구현되었을 경우에는 이부분은 Type1,2 JDBC드라이버를 이용해서 제작할 수 있다.

Type 4: Native-protocol / all-Java driver

가장 많이 사용하고, 가장 좋은 성능을 내는 JDBC Type으로, Type 4 는 100% Java 로 구현된 JDBC드라이버로, 네트워크를 통해서 각각의 DBMS로 직접 request를 전송하는 방법이다. 4가지 Type중에서 가장 효율적으로 속도가 빠른 구조이며, 애플리케이션을 배포하는데도 문제가 없으며 추가로 ODBC,Native Lib를 설치하거나 Middleware를 설치할 필요가 없다. 대부분의 DBMS vendor들이 Type 4 드라이버를 무료로 제공하고 있으며, DBMS vendor site에서 대부분 무료로 다운 받을 수 있다.

장점

ODBC나 Native Lib형태로 request를 변환하지 않기 때문에, performance가 매우 좋다. 또한 앞에서도 말했듯이 특별하게 Driver나 Lib, Middleware등을 설칠할 필요가 없기 때문에 배포등이 매우 용이하다.

단점

각각의 데이터베이스마다 다른 JDBC 드라이버를 사용해야한다.

JDBC driver benchmark

4가지 JDBC driver type에 대해서 살펴봤다. 이번에는 5 JDBC 드라이버들의 성능들을 비교해도록 한다. Benchmark를 수행하기 위해서 성능 측정을 위한 몇가지 기준을 마련했는데, Connection Time, Data retrieval time,insertion time,fetch and traverse time등을 측정했다.

JDBC Driver는 각 제조업체에서 제공하는 trial version등을 이용했다. 테스트 환경은 DB서버와 클라이언트 2대를 사용했으면, Windows NT 4.0, SQL Server 7.0, JDK1.2.1, 펜티엄 3 PC를 사용했다.

아래 5개의 JDBC 드라이버를 테스트 하였다.

1. JDBC-ODBC Bridge by Sun

2. IDS Driver by IDS Software

3. SequeLink by Merant

4. Jturbo 1.22 by ashna

5. I-net Sprinta 2000 by I-net Software


JDBC-ODBC Bridge

IDS Driver

SequeLink

JTurbo 1.22

I-net Sprinta

Vendor

Sun JDK

IDS Software

Merant

Ashna inc.

I-net Software

Driver Type

1

3

3

4

4

Footprint(compressed)

-

114KB

269KB

107KB

42KB

Database connection Time (ms)

55

22

105

25

190

Data retrieval time (ms)(33,000 records)

10

5

10

905

675

Fetch & traversal time(ms)(33,000 records)

865

18,700

15,700

910

560

Data insertion time (ms)(1,000 records)

3,700

3,000

3,500

3,600

3,050


728x90

'오래된글 > Java' 카테고리의 다른 글

EJB CMP의 단점  (0) 2018.04.07
Scrolling Result Sets  (0) 2018.04.07
객체 저장 : Storing Classes, Images and Other Large Objects  (0) 2018.04.07
What is the way of Direct Memory Access in Java?  (0) 2018.04.07
Easy java Persistence  (0) 2018.04.07
Comments