BerkeleyDB дублировать элементы данных как журнал только для добавления?

Я изучаю использование BerkeleyDB Java Edition для проекта. До сих пор я только читал некоторую документацию (не написал никакого кода), но это выглядит как хорошее совпадение.

Одна из функций, которую я хотел бы - это журнал, доступный только для определенного ключа. например

«my key» => «snapshot 1»
         => «snapshot 2»
         => «snapshot 3»

Документация Duplicate Data items выглядит так, как будто я установил DB_DUP флаг Я могу написать несколько элементов для ключа (в настраиваемом порядке), а затем получить их с помощью курсора.

Это разумное / подходящее использование для BerkeleyDB?

(У меня есть другие причины желать использовать BerkeleyDB в проекте, это не мой основной вариант использования. Мне известны все возможности Redis, но оперативная память не подходит)

1 ответ

Вы можете, конечно, использовать Беркли DB, как вы описываете. Это немного сложнее, чем прямое хранилище значений ключей, поскольку есть ряд дополнительных флагов для операций с курсорами, на которые вам нужно обратить внимание. Преимущество в том, что он хранит только одну копию ключа! Но, по крайней мере, в какой-то версии вы не могли хранить одни и те же элементы данных, если они были отсортированы. Просто, вы знаете, предостережения.

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

«my key.1» => «snapshot 1»
«my key.4» => «snapshot 2»
«my key.9» => «snapshot 3»

Вы по-прежнему будете вводить их с помощью курсора, как если бы вы использовали дубликаты данных. Просто начните поиск в «my key.0» и прекратить его, когда вы видите «my other key.x», Я держу пари, что вы сможете получить что-то работающее с меньшим количеством царапин на голове.

Другие вопросы по тегам