2010-04-07 4 views
10

Java 기반 웹 응용 프로그램을 설계하고 있으며 키 - 값 저장소가 필요합니다. 버클리 DB는 나에게 충분히 적합하지만, C에서 구현 된 버클리 DB 코어와 순수 자바로 구현 된 버클리 DB 자바 에디션 중에서 두 가지 버클리 DB를 선택할 수 있습니다.Berkeley DB Core와 Berkeley DB 중 하나를 선택하십시오.

질문은 사용하는 방법을 선택하는 것입니다. 웹 애플 리케이션의 확장 성 및 성능은 매우 중요합니다 (누가 내 아이디어를 다음 Youtube가 될지 알고 있습니다). 두 가지 사이에서 의미있는 벤치 마크를 쉽게 찾을 수 없었습니다. Core Java API에 대해서는 아직 익숙하지 않았지만, Java Edition보다 훨씬 좋지 않을 것으로 생각됩니다.

다른 키 - 값 저장소가 훨씬 더 좋을 경우, 역시 추천하십시오. 나는 작은 바이너리 블롭 (blob)을 저장하고 있으며 키는 아마도 데이터 또는 다른 고유 한 ID의 해시가 될 것입니다.

답변

2

이들에 대한 공통 인터페이스를 얻고 적절한 단위 테스트 세트를 가지고 있다면 나중에 나중에 간단히 스왑 할 수 있어야합니다 (아마도 어려운 사실을 기반으로 결정해야 할 때 지금은 사용 가능하지 않습니다.)

+2

경고 : 데이터베이스 자체는 버전간에 이식 할 수 없습니다. 이 경로를 따라 간다면 구현 자체를 바꾸려는 데이터 자체에 대한 마이그레이션 전략이 필요합니다. 이러한 이유로 데이터의 이식성이 중요하다면 Java Edition보다 Berkeley DB 및 Java API를 사용하는 것이 좋습니다. – Shaun

2

나는 이식성 (주로 휴대 기기에서도 실행될 수있는 무언가가 필요함) 때문에 자바 판과 함께 동일한 문제에 직면하고 결정했습니다. 또한 Direct Persistence Layer (DPL) API가 있으며 전체 db가 단일 병이라는 사실로 인해 배포가 매우 간단 해집니다.

최신 버전 4는 고 가용성 및 성능 향상을 가져 왔습니다. 또한 장시간 실행되는 Java 응용 프로그램이 이러한 시나리오를 통해 네이티브 C 응용 프로그램의 성능을 능가 할 수 있다는 점도 있습니다.

Java 응용 프로그램 (데스크탑 또는 웹)에 가장 적합합니다.

2

이전에 동일한 질문이있었습니다. 일부 벤치 마크를 수행 한 후 기본 버전의 해시 모드가 java 버전이 제공하는 것보다 훨씬 빠르고 스토리지가 효율적이라는 것을 알았습니다. 따라서 기본 이행.

예상되는 저장 용량에 대해 자신의 벤치 마크를 수행하고 Java 버전이 충분히 빠르다고 판단 할 것을 제안합니다.

(해당되는 경우) 또는 성능이 큰 문제가되지 않는다면 (나를 위해 중요합니다) Java 버전으로 이동하십시오. 그렇지 않으면 네이티브 코드로 이동하십시오 (자신의 유스 케이스에 대해 동일한 성능 향상이 있다고 가정 할 경우).

btw : 내 벤치 마크는 키가 문자열이고 값이 int (4 바이트) 인 20,000,000 개의 레코드 중에서 임의의 키를 쿼리하는 속도를 테스트했습니다. 삽입 (벤치 마크를 채우는 것)은 네이티브 버전에서 훨씬 빠르며 쿼리는 두 배 빠릅니다.

(이는 Java의 단점 때문이 아니라 Java 버전이 네이티브 버전과 동일한 버전이 아니기 때문에 (4.0 vs 4.8 IIRC)).

12

Java로 BDB-JE와 BDB- 코어를 모두 사용하는 데 꽤 많은 경험이 있습니다. 어느 것을 사용할 지 결정하는 것은 매우 간단합니다 : 동시성을 원한다면, BDB-JE를 사용하십시오. 확장 성을 원하면 BDB-core를 사용하십시오.

BDB-JE는 파일 형식과 축출 된 캐시 항목을 정리하기위한 Java 가비지 수집에 의존하기 때문에 큰 데이터베이스에서 성능이 저하됩니다. 긴 가비지 콜렉션이 일시 중지되거나 마술 GC 설정을 조정하는 데 많은 시간을 할애해야합니다.백그라운드 클리너 스레드가 초기 캐시 축출에 의해 생성 된 가비지를 정리하는 데 많은 시간을 소비해야하기 때문에 파일 형식에도 문제가 있습니다. 데이터베이스가 RAM에 들어 맞으면 BDB-JE가 잘 작동합니다.

BDB-core는 페이지 잠금 전략에 의존하며 고도의 동시 응용 프로그램은 많은 교착 상태를 경험합니다. 작업을 무작위로 정렬 할 수 있으면 교착 상태 가능성이 줄어들지 만 결코 제거 할 수 없습니다. BDB-core는보다 전통적인 방식으로 데이터를 저장하기 때문에 예상 가능한 성능 저하와 예상되는 성능 저하를 통해 초대형 크기로 확장됩니다. 캐시는 가비지 수집기에서 관리하지 않기 때문에 상당히 클 수 있으며 일시 중지가 발생하지 않을 수 있습니다.

1

Java Edition을 사용하기로 결정한 이유는 동일한 배포 가능 내에 데이터베이스 런타임을 포함시킬 수 있기 때문입니다. 이것은 내 설정에 중요한 기능이었습니다. 핵심과 JE를 벤치마킹하지 않았지만 데이터베이스 저장소를 처음 평가할 때 테스트 한 다른 키 - 값 저장소와 비교할 때 뛰어난 성능을 보았습니다.

웹 응용 프로그램을 만드는 경우 장기적으로 동시성이 매우 중요 할 수 있습니다.