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»
, Я держу пари, что вы сможете получить что-то работающее с меньшим количеством царапин на голове.