Я в основном хочу сохранить хеш-таблицу на диске, поэтому я могу запросить ее позже. Моя программа написана на Java. Хэш-таблица отображает из строки в список.
Есть много магазинов с ключевыми значениями, но после много исследований/чтения, непонятно, какой из них лучше для моих целей. Вот некоторые важные для меня вещи.
Я просмотрел Redis и MongoDB. Оба выглядят многообещающими, но не идеальными для моих целей. Любая информация будет оценена.
Прежде чем предоставлять какие-либо ответы, я бы начал с вопроса о том, зачем мне хранить эту хеш-таблицу на диске, так как в соответствии с вашим описанием набор данных невелик, и поэтому я предполагаю, что он может вписаться в память. Если это просто, чтобы повторно использовать эту структуру после перезапуска приложения, то вы, вероятно, можете использовать любой формат, чтобы сохранить его.
Во-вторых, вы не даете никаких оснований для того, чтобы Redis или MongoDB не были идеальными. Основываясь на ваших (коротких) 3 требованиях, я бы сказал, что Redis, вероятно, лучший выбор:
Единственная причина, по которой я мог предположить, что вы устраняете Redis, - это то, что вы ищете строгие характеристики ACID. Если это то, что вы ищете, вы могли бы взглянуть на BerkleyDB JE. Это было какое-то время, и документация хорошая.
То, что вы ищете, это библиотека, которая поддерживает распространенность объекта. Эти библиотеки предназначены для простого и быстрого предоставления таких коллекций, как API. Ниже представлено несколько таких библиотек, которые позволяют работать с коллекциями, но за кулисами используют дисковое хранилище.
Если ваш набор данных невелик, и вы хотите, чтобы он был ПРОСТОЙ. почему бы вам не сериализовать хэш файл в файл или rdbms и загрузить его в ваше приложение?
Как вы не хотите "запрашивать" ваш хэш? ключевое приближение? ценность "подобия"? Я не знаю, кажется, излишним для меня, чтобы хранить хранилище ключей только ради.
Посмотрите JDBM2 - http://code.google.com/p/jdbm2/
Я работал над базой JDBM 1 и был впечатлен тем, что я видел в jdbm2
Карта хроники находится в одном файле. Этот файл можно перемещать по файловой системе и даже отправлять на другой компьютер с другой ОС и/или архитектурой и оставаться открытой базой данных хроники.
Чтобы создать или открыть хранилище данных (если файл базы данных не существует, он создается, в противном случае доступ к существующему хранилищу):
ChronicleMap<String, List<Point>> map = ChronicleMap
.of(String.class, (Class<List<Point>>) (Class) List.class)
.averageKey("range")
.averageValue(asList(of(0, 0), of(1, 1)))
.entries(10_000)
.createPersistedTo(myDatabaseFile);
Затем вы можете работать с созданным объектом ChronicleMap
так же, как с простым HashMap
, не заботясь о сериализации ключей и значений.