2011-04-26 3 views
2

사용자 정의 맵을 사용하는 프로젝트에서 작업 중입니다 < 문자열, 항목 > (항목은 int 쌍입니다) B- 트리 기반의 구현으로 10에서 100까지 저장 수백만 개의 레코드에서이 클래스의 코드는 느리고 더러워집니다. 필자는 저장 용 파일과 소량의 메모리를 사용하는 Map을 효율적으로 구현해야합니다.java.util.Map의 기존 파일 기반 구현

자바 버젼의 Berkeley DB가 java.util.Collection API (Map 포함)를 검색했지만 발견되었습니다.이 목적을 위해 완전한 데이터베이스를 사용하는 것은 불필요합니다 (많은 파일이있는 디렉토리를 사용하고 몇 가지 추가 관리 용 스레드). 더 간단한 해결책이 있습니까?

답변

1

디스크 백업 DBM 구현 인 Kyoto Cabininet을 살펴보십시오. 이전 버전 인 Tokyo Cabinet을 사용했습니다. 사용하기 쉽고 기본적으로 네이티브 Map처럼 매우 빠릅니다.

+0

좋은데, java.util.Map 인터페이스를 제공하지 않습니다. (Map 인터페이스를 사용하는 많은 코드가 있습니다.) – Ivan

+0

Kyoto Cabinet 데이터베이스 객체에 대한 사용자 정의'Map' 래퍼를 만드는 데 몇 분이 걸릴 것입니다. –

1

JDBM은 가볍고 순수한 Java B- 트리 구현입니다.

2

나는 최근에 이와 똑같은 문제가 있었으며 NoSQL과 캐시를 포함하여 태양 아래 모든 것을 보았다. 디스크/파일 기반/백업 된 해시 맵이 필요합니다.

Berkeley DB Java Edition이 가장 좋습니다. 신속하고 확장 성이 뛰어나며 완벽하지만 소스 코드를 배포하거나 Oracle에서 상용 버전을 구입하지 않고도 클라이언트에 배포 할 수는 없습니다.

휠을 재발 명하는 것 외에도 JDBM2 만 선택할 수 있습니다. 또한 해시 맵과 트리 맵을 가지고 있습니다. OutOfMemoryError를 방지하기 위해 정기적으로 디스크를 비울 책임이 있으며 Berkeley DB만큼 빠르지는 않지만 두 번째로 좋은 선택입니다.