Вопрос

Есть ли в Java (или есть доступная библиотека), которая позволяет мне иметь хэш-карту на основе диска?Он не обязательно должен быть атомарным или что-то еще, но доступ к нему будет осуществляться через несколько потоков и не должен завершаться сбоем, если двое одновременно обращаются к одному и тому же элементу.

Кто-нибудь о чем-нибудь знает?

Это было полезно?

Решение

Либо Свойства файлов или Беркли БД. может быть то, что вы ищете. То java.util.Properties Сама реализация java.util.Map и предоставляет методы load от и store к файлу. Berkeley DB часто рекомендуется в качестве легкого хранения данных для ключа.

Другие советы

Mapdb.

MAPDB обеспечивает одновременный TREEWAP и HASHMAP, поддерживаемый дисковым хранилищем или памятью OFF-COOCH. Это быстрый, масштабируемый и простой в использовании встроенный двигатель баз данных Java. Он упакован с такими функциями, как транзакции, космическая эффективная сериализация, кэш экземпляра и прозрачное сжатие / шифрование. Он также имеет выдающуюся производительность, соперничаю только подрядными встроенным двигателям БД.

http://www.mapdb.org/

JDBM2.

Встроенное значение Key Java База данных.

https://code.google.com/p/jdbm2/

Похоже, вам нужно что-то близко к легкой БД. Вы смотрели на / рассмотрены 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 из коробки.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top