Являются ли они какой-либо достойной реализацией на 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 и сохраняет данные на диске (под капотом это делается путем отображения памяти хроники в файл).