자바로 만든 embedded db 비교

embedded db는 oracle, mysql 처럼 네트워크 기반으로 데이터 서비스를 제공하지 않고 DB를 사용하는 프로그램이 수행되는 장비의 로컬 파일시스템 또는 메모리를 이용하는 DB를 말한다.
자바로 만든 embedded db 오픈소스 중  derby, berkeley db, hsqldb를 가지고 몇가지 테스트를 해 보았다. derby, hsqldb는 네트워크 기반, 임베디드 기반 모두 지원하지만 여기서는 임베디드 기반만 테스트 하였다. berkeley db(이후 bdb)는 db 라기 보다는 hash 형태만 제공하는 아주 간단한 db이다.
1 row = 1000byte, 100,000 rows 데이터를 저장하는 테스트를 수행하였다.

100,000  insert 한 다음 commit(bdb의 경우 sync) 하는 경우

bdb(14초) << hsqldb(42초) < derby(53초)

bdb가 다른 db에 비해 상상 할 수 없을 정도의 속도로 저장되었다.
hsqldb의 경우 옵션에 따라 성능 차이가 많이 나타난다. hsqldb는 server 타입, file 타입, memory 타입 세가지 형태로 사용할 수 있다. 테이블을 생성할 때 create memory table ...형태로 만들면 memory 기반 테이블이 되고 create cached table로 만들면 file 기반 테이블이 된다.
file 기반 테이블은 일정 크기 동안은 메모리에 저장시키고(물론 change log 정보는 파일에 기록) 메모리가 일정 수준 이상 도달하면 디스크로 저장하는 하이브리드 방식을 채택하고 있다. 여기서 문제점은 디스크로 저장할 때 기존 파일에 추가하는 것이 아니라 기존 파일 + 메모리 내용이 되는 새로운 파일을 만든다는 것이다. 데이터 크기가 큰 경우 데이터 파일을 생성하는데 너무 많은 시간이 소요되고 이 시간 동안 insert 작업을 할 수 없게 된다.


1건씩 commit 하는 경우

hsqldb(42초) < derby(158초) << bdb(답이 없음, 수십분 이상)


위 성능으로 보면 hsqldb가 commit, rollback을 지원하지 않는 것 처럼 보이지만 실제 테스트 해보면 rollback도 잘 지원한다. 건당 commit 하는 경우와 전체 commit 하는 경우가 동일한 속도를 보장하고 있는데 다른 side effect는 없는지 확인해봐야 겠다.
어쨋든 여러가지를 고려해보면 안정적인 성능을 발휘하는 derby가 그나마 가장 좋기는 한데 원하는 수준의 속도가 나오지 않는다.
 


 

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


Trackback URL : http://www.jaso.co.kr/trackback/230

Comments List

  1. nova 2008/03/03 15:46 # M/D Reply Permalink

    bdb를 어떻게 테스트 하셨는지 궁금하군요.
    제가 예전에 4.1.x 버젼 (C API)를 3년 정도 개발 한 적이 있는데요.
    1row 하나 insert 하는데 수십분이라니요?
    개발상의 ISAM 형식의 원시적인 data management 기능만 제공하기에 개발상에 어려운 점은 많이 있으나 탁월한 성능을 나타냅니다.
    물론 지금은 오라클에 인수된 상태이구요.

    sleepycat 부회장인 keith에 문의해 보세요.
    bdb가 너무 억울합니다.

    1. 김형준 2008/03/03 16:27 # M/D Permalink

      1건 insert하는데 수십분이 걸린 것은 아닙니다. 1건 insert, sync, 1건 insert, sync 형태로 백만건 입력했을 경우 입니다.
      물론 제가 테스트 환경을 잘못 구성했을 수도 있겠죠...

Leave a comment
« Previous : 1 : ... 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : ... 345 : Next »