Хэш-карта на основе диска
-
27-09-2019 - |
Вопрос
Есть ли в Java (или есть доступная библиотека), которая позволяет мне иметь хэш-карту на основе диска?Он не обязательно должен быть атомарным или что-то еще, но доступ к нему будет осуществляться через несколько потоков и не должен завершаться сбоем, если двое одновременно обращаются к одному и тому же элементу.
Кто-нибудь о чем-нибудь знает?
Решение
Либо Свойства файлов или Беркли БД. может быть то, что вы ищете. То java.util.Properties
Сама реализация java.util.Map
и предоставляет методы load
от и store
к файлу. Berkeley DB часто рекомендуется в качестве легкого хранения данных для ключа.
Другие советы
Mapdb.
MAPDB обеспечивает одновременный TREEWAP и HASHMAP, поддерживаемый дисковым хранилищем или памятью OFF-COOCH. Это быстрый, масштабируемый и простой в использовании встроенный двигатель баз данных Java. Он упакован с такими функциями, как транзакции, космическая эффективная сериализация, кэш экземпляра и прозрачное сжатие / шифрование. Он также имеет выдающуюся производительность, соперничаю только подрядными встроенным двигателям БД.
JDBM2.
Встроенное значение Key Java База данных.
Похоже, вам нужно что-то близко к легкой БД. Вы смотрели на / рассмотрены Java db? Световой БД с одной, индексированной таблицей в основном будет на основе дисковых, безопасных хеш-карт.
JDBM2. именно то, что вы спрашиваете. Он обеспечивает хешмап, резервное копирование на диске (среди других карт). Его быстро, потоко-безопасный и API действительно прост.
Проект " Волан - де - Морт " это также действительно быстрая / масштабируемая / реплицируемая "Хэш-карта".Он используется в LinkedIn, и производительность там тоже довольно хорошая:
Цитата с их сайта:
Вот пропускная способность, которую мы видим от одного многопоточного клиента, взаимодействующего с одним сервером, на котором "горячие" данные набор находится в памяти под искусственной большой нагрузкой в нашей лаборатории производительности:
Читает:19,384 рекв/сек
Пишет:16,559 рекв/сек
Карта хроники внедрение ConcurrentMap
И сохраняют данные на диск через отображение его памяти в файл.
Карта хроники концептуально очень похожа на MAPDB (предоставляет аналогичный API Builder и Map
интерфейс), но карта хроники раз быстрее Чем MAPDB и имеет гораздо лучшего параллелизма (карта хроники использует высококлассные многоуровневые спиновые замки).
Таким образом, год сейчас 2016 год. И если кто-то ищет решать эту проблему, я узнал, что низкоуровневые среды API в Xodus. от Jetbrains работает для этой же цели, используя их computeInTransaction
Хранить лямбдас.
Предоставлено, это не так, как имеет чистый Map
Экземпляр, но это сработало для моего использования.
Другой недавний вариант - использовать H2's. MVStore
Хранение двигателя Что делает то же самое, но я думаю, что это более адаптировано к самой базе данных.
Ваше здоровье!
В 2018
Самый легкий настойчивый key value
магазин то База данных H2 с MVSTORE:
MVSTORE - это постоянный, журнал структурированный магазин ключа-значений. Планируется быть следующей подсистемой хранения H2, но она также может быть использована непосредственно в приложении без использования JDBC или SQL.
MVSTORE означает «MULTI-версительный магазин».
Каждый магазин содержит несколько карт, которые могут быть доступны с использованием интерфейса Java.util.map.
Поддерживаются как на основе файлов, так и операция в памяти.
Предназначен, чтобы быть быстрым, простым в использовании и маленьким.
Операции одновременного чтения и записи поддерживаются.
Транзакции поддерживаются (включая параллельные транзакции и 2-фазные фиксаторы).
Инструмент очень модульный. Он поддерживает множество типов данных и сериализацию, подключаемое хранилище (к файлу, к памяти OFF-куче), реализация на подключаемых карт (B-дерево, R-дерево, одновременно B-дерево в настоящее время), хранилище BLOB и абстракция файловой системы Поддержка зашифрованных файлов и zip-файлов.
H2
также содержится в одной библиотеке 1.8 meg
Я также посмотрел на:
- Mapdb. (
13 meg
зависимости) - хроника-карта (
5.5 meg
Зависимости - быстрые необязательно распределены) - lmdbjava (
2 meg
Зависимости Java +lmdb
C Библиотека) - самая быстрая реализация, но неthread safe
из коробки.