Berkeley DB: получение только ключей - PullRequest
1 голос
/ 16 ноября 2010

Я получаю диапазон ключей в базе данных Berkeley DB, используя курсор.Я делаю, используя флаг DB_SET_RANGE, а затем несколько раз, используя флаг DB_NEXT.

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

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

Я думаю, что вы можете использовать метод DatabaseEntry.setPartial (с len = 0), чтобы сообщить механизму BerkeleyDB, чтобы он не получал данные из значения.

1 голос
/ 16 ноября 2010

Интересная проблема. Я не верю, что можно просто получить ключи в одиночку.

Один из подходов - хранить ключи в собственной базе данных с нулевыми данными. Если вы не можете выдержать дублирование, я думаю, что наилучшим подходом будет массовое чтение, так как вы по определению имеете хороший локальный эталон для вашего диапазона значений. Используйте флаг DB_MULTIPLE_KEY в вашем вызове DBC :: get () и большой буфер DBT для данных. Используйте DbMultipleKeyDataIterator для итерации блока массового извлечения.

Это должно улучшить ситуацию, так как последовательные конечные элементы в вашем поиске приведут к эффективному копированию страницы во временный буфер DBT, который вы используете в DBC :: get.

...