2011-09-01 5 views
0

누군가가 Java List (LinkedList 또는 ArrayList)를 BerkeleyDB와 비슷한 것으로 대체하는 샘플 코드가있을 수 있습니까? 내 문제는 목록을 메인 메모리 한계를 넘어서 확장해야한다는 것입니다. 몇 가지 간단한 샘플 코드가 정말 좋을 것입니다.BerkeleyDB를 사용하여 java.util.List를 대체하십시오.

이제 정수 (키)에 간단한 TupleBinding을 사용하고 Diff 클래스 (데이터 값)에 SerialBinding을 사용했습니다.

14:03:29.287 [pool-5-thread-1] ERROR o.t.g.view.model.TraverseCompareTree - org.treetank.diff.Diff; local class incompatible: stream classdesc serialVersionUID = 8484615870884317488, local class serialVersionUID = -8805161170968505227 

java.io.InvalidClassException이 :

는 지금은 오류를 수신하고있어 org.treetank.diff.Diff을; 지역 클래스 호환되지 않는 : 스트림 classdesc의 serialVersionUID = 8484615870884317488 로컬 클래스의 serialVersionUID = -8805161170968505227 내가 사용

청취자와 TransactionRunner 클래스는 다음과 같습니다 작동하지 않는 이유

/** {@inheritDoc} */ 
@Override 
public void diffListener(final EDiff paramDiff, final IStructuralItem paramNewNode, 
    final IStructuralItem paramOldNode, final DiffDepth paramDepth) { 
    try { 
     mRunner.run(new PopulateDatabase(mDiffDatabase, mKey++, new Diff(paramDiff, paramNewNode.getNodeKey(), paramOldNode.getNodeKey(), paramDepth))); 
    } catch (final Exception e) { 
     LOGWRAPPER.error(e.getMessage(), e); 
    } 
} 

private static class PopulateDatabase implements TransactionWorker { 

    private StoredMap<Integer, Diff> mMap; 
    private int mKey; 
    private Diff mValue; 

    public PopulateDatabase(final DiffDatabase paramDatabase, final int paramKey, final Diff paramValue) { 
     Objects.requireNonNull(paramDatabase); 
     Objects.requireNonNull(paramValue); 
     mMap = paramDatabase.getMap(); 
     mKey = paramKey; 
     mValue = paramValue; 
    } 

    @Override 
    public void doWork() throws DatabaseException { 
     mMap.put(mKey, mValue); 
    } 
} 

나도 몰라 :/

편집 : 죄송합니다. 생성 된 환경/데이터베이스를 삭제하고 새로운 것을 만들어야했습니다.

답변

2

나는 그렇게 간단하지 않을까 걱정됩니다. 첫 번째 단계는 원하는 코드를 리팩토링하여 목록에 대한 모든 액세스를 별도의 클래스로 옮기는 것입니다 (원하는 경우 DAO라고 함). 그러면 목록 대신 데이터베이스로 이동하는 것이 훨씬 쉬울 것입니다.

+0

난 간단한 숫자 (0 to List.size())를 키로 저장 한 다음 데이터베이스 추상화를 사용하여 실제 데이터 인 hm을 얻어야한다고 가정합니다. – Johannes

+0

전적으로 귀하의 데이터에 따라 다릅니다. 데이터에 다른 고유 한 구조가있는 경우 더 적절한 데이터베이스 레이아웃을 만드는 것이 바람직 할 수 있습니다. – nfechner

2

Berkeley DB는 이러한 유형의 작업에 대해 심각하게 과도하게 사용합니다. 구성하고 설정하는 것은 공정한 짐승이며, 라이센스가 현재 상업용이라고 생각합니다. 디스크 백업 목록이나 맵을 사용하는 것이 훨씬 나을 것입니다. 후자의 예로는 Kyoto Cabinet을 살펴보십시오. 매우 빠르며 표준 Java Collections 인터페이스를 구현하며 목록 또는 맵처럼 사용하기 쉽습니다. 예제 코드는 내 answer을 참조하십시오.

관련 문제