Являются ли они какой-либо достойной реализацией на Java-карте на диске?
Я ищу реализацию на java.util.Map
на диске. Ничего особенного, просто то, что я могу указать на каталог или файл, и хранить его там там, каким-то образом он выбирает. Кто-нибудь знает об этом?
Ответы
Ответ 1
Вы можете посмотреть проект Disk-Backed-map.
Библиотека, которая реализует карту с поддержкой диска в Java
Небольшая библиотека, которая обеспечивает реализацию резервной копии диска для хранения большого количества пар значений ключа. Реализации карт (HashMap, HashTable) превышают около 3-4 миллионов ключей/ГБ памяти для очень простых пар ключ/значение, и в большинстве случаев предел намного ниже. Карта DiskBacked, с другой стороны, может хранить до 16 миллионов (64-бит JVM) до 20 миллионов (32-битных JVM) ключей/ГБ независимо от размера пар ключ/значение.
Ответ 2
Если вы ищете структуры на основе key-object
для сохранения данных, то базы данных NoSQL - очень хороший выбор. Вы обнаружите, что некоторые из них такие MongoDB или Redis и выполняются для больших наборов данных, и помимо хэш-ориентированных поисковых запросов они предоставляют интересные запросы и транзакционные функции.
В сущности, эти типы систем являются реализацией Карты. И не должно быть слишком сложно реализовать свой собственный адаптер, который реализует java.util.Map
, чтобы соединить их.
Ответ 3
MapDB (mapdb.org) делает именно то, что вы ищете. Помимо дисков, поддерживаемых TreeMap и HashMap, он предоставляет вам другие типы коллекций.
Эти карты также потокобезопасны и имеют действительно хорошую производительность.
См. Features
Ответ 4
Вы можете использовать простую реализацию EHCache? Самое приятное в EHCache, что его можно очень просто реализовать: -)
Я так понимаю, вы исключили сериализацию/десериализацию фактического экземпляра карты?
Ответ 5
Это похоже на относительно новое решение проблемы с открытым исходным кодом, я использовал его и, как и раньше,
https://github.com/jankotek/JDBM4
Ответ 6
Chronicle Map - это современный и самый быстрый решение этой проблемы. Он реализует интерфейс ConcurrentMap
и сохраняет данные на диске (под капотом это делается путем отображения памяти хроники в файл).