использование BerkeleyDB для замены java.util.List - PullRequest
0 голосов
/ 01 сентября 2011

есть ли у кого-нибудь пример кода, как заменить java List (LinkedList или ArrayList) чем-то похожим в BerkeleyDB?Моя проблема в том, что я должен заменить списки, чтобы масштабировать их за пределы основной памяти.Какой-то простой пример кода был бы действительно хорош.

Теперь я использовал простую привязку TupleBinding для целых чисел (ключи) и привязку SerialBinding для класса Diff (значения данных).

Теперь яполучаю сообщение об ошибке:

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;несовместимый локальный класс: stream 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 ]

2 голосов
/ 01 сентября 2011

Беркли БД - это серьезный перебор для этого типа задач.Это чудовище для настройки и настройки, плюс я считаю, что лицензия теперь коммерческая.Вам будет намного лучше, если использовать список или карту на диске.В качестве примера последнего взглянем на Киотский кабинет .Он очень быстрый, реализует стандартный интерфейс Java Collections и прост в использовании, как List или Map.Смотрите мой другой ответ для примера кода.

2 голосов
/ 01 сентября 2011

Боюсь, все будет не так просто.Первый шаг, который вы, возможно, захотите сделать, - это реорганизовать код, чтобы переместить все обращения к списку в отдельный класс (если хотите, назовите его DAO).Тогда вам будет гораздо проще перейти в базу данных, а не в список.

...