Существующая файловая реализация java.util.Map - PullRequest
2 голосов
/ 26 апреля 2011

Я работаю над проектом, в котором используется пользовательская реализация Map (где Entry - пара целых чисел), основанная на B-дереве для хранения от 10 до 100 миллионов записей. Код этого класса: медленно и грязно. Мне нужна эффективная реализация карты, которая использует файл для хранения и небольшой объем памяти.

Я искал и обнаружил, что Java Edition Of Berkeley DB имеет API java.util.Collection (включая Map), но для этой цели кажется излишним использовать полноценную базу данных (она использует каталог со многими файлами, имеет несколько дополнительных потоков для управления). Есть ли более простое решение?

Ответы [ 3 ]

2 голосов
/ 16 октября 2012

Недавно у меня возникла та же проблема, и я смотрел на все под солнцем, включая NoSQL и кэши.Вам нужна хеш-карта на основе диска / файла / резервной копии.

Berkeley DB Java Edition - безусловно, лучший.Это быстро, масштабируемо и полно, но вы не можете распространять его среди клиентов, не распространяя ваш исходный код или не покупая коммерческую версию у Oracle.

Единственный другой выбор, кроме изобретения колеса, - это JDBM2.Он также имеет хэш-карту и древовидную карту.Вы несете ответственность за регулярную очистку диска, чтобы предотвратить OutOfMemoryError, и он не так быстр, как Berkeley DB, но это очень хороший второй вариант.

1 голос
/ 26 апреля 2011

JDBM - это легкая, чистая реализация Java B-Tree.

1 голос
/ 26 апреля 2011

Взгляните на Kyoto Cabininet , реализацию DBM на основе диска.Я использовал предыдущую версию, Tokyo Cabinet - она ​​была очень проста в использовании, в основном, как нативная Map, и очень быстрая.

...