java - 使用 BerkeleyDB 替换 java.util.List

标签 java berkeley-db

有人可能有示例代码如何在 BerkeleyDB 中用类似的东西替换 java 列表(LinkedList 或 ArrayList)吗?我的问题是我必须替换列表才能超出主内存限制。一些简单的示例代码会非常好。

我现在对整数(键)使用了简单的 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);
    }
}

我不知道为什么它不起作用:-/

编辑:抱歉,我只需删除生成的环境/数据库并创建一个新的。

最佳答案

恐怕事情不会那么简单。您可能想要采取的第一步是重构代码,将对列表的所有访问移至一个单独的类中(如果您愿意,可以将其称为 DAO)。然后移动到数据库而不是列表会容易得多。

关于java - 使用 BerkeleyDB 替换 java.util.List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269867/

相关文章:

java - 检查单词是否包含Java正则表达式中的子字符串

java - 按对象属性对对象的 ArrayList 进行排序并组织它们

java - Spring 的 @Value 在 CamelConfiguration 子类中无法正常工作

java - 使用 Berkeley DB API 作为 Spring+JPA 应用程序 (DB2) 的缓存解决方案

c - 使用 C 在 Berkeley DB 中存储 JSON 字符串

java - 将文本中心与给定位置对齐

java - 允许多个 JLabel 中的文本重叠

android - openldap 2.4 使用 Syncrepl 配置复制

c - 在 ubuntu 上使用 berkeleydb - 找不到 db 库