有人可能有示例代码如何在 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/