2011-09-01 57 views
0

是否有人也許有示例代碼如何取代BerkeleyDB的類似Java列表(鏈表或ArrayList的)?我的問題是,我必須替換列表以擴展主內存限制。一些簡單的示例代碼會非常好。使用的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()來則爲list.size)作爲存儲鍵簡單的數字,然後使用一個數據庫抽象獲得實際的數據,HM。 – Johannes

+0

這完全取決於您的數據。如果數據具有其他固有結構,則創建更合適的數據庫佈局可能是有意義的。 – nfechner

2

的Berkeley DB是嚴重過殺這種類型的任務。這是一個公平的配置和設置的野獸,另外我相信這個許可證現在是商業化的。使用磁盤備份列表或映射會更好。作爲後者的一個例子,請看Kyoto Cabinet。它非常快速,實現了標準的Java Collections界面,並且與List或Map一樣易於使用。示例代碼請參閱我的其他answer

相關問題