База данных ключ-значение с клиентом Java - PullRequest
2 голосов
/ 03 февраля 2011

Я хочу сохранить хеш-таблицу на диске, чтобы я мог запросить ее позже. Моя программа написана на Java. Хеш-таблицы отображаются из строки в список.

Есть много хранилищ значений ключей, но после долгих исследований / чтения не ясно, какой из них лучше для моих целей. Вот некоторые важные для меня вещи.

  1. Простое хранилище значений ключей, которое позволяет вам получить значение одним ключом.
  2. Хороший Java-клиент, который хорошо документирован.
  3. Набор данных небольшой и не требует дополнительных функций. Опять же, я хочу, чтобы все было просто.

Я изучил Redis и MongoDB. Оба выглядят многообещающе, но не идеально для моих целей. Любая информация будет оценена.

Ответы [ 5 ]

4 голосов
/ 03 февраля 2011

Что вам нужно, так это библиотека, поддерживающая распространенность объекта .Эти библиотеки разработаны так, чтобы быть простыми и быстрыми, предоставляя коллекцию, подобную API.Ниже приведено несколько таких библиотек, которые позволяют работать с коллекциями, но за кадром используют дисковое хранилище.

  1. space4j
  2. Advagato
  3. Превайлер
3 голосов
/ 03 февраля 2011

Если ваш набор данных маленький, и вы хотите, чтобы он был ПРОСТО. почему бы вам не сериализовать вашу hashmap в файл или rdbms и загрузить ее в ваше приложение?

Как вы не хотите "запрашивать" вашу хэш-карту? ключевое приближение? значение "сходство"? Я не знаю, мне кажется чрезмерным хранить хранилище ключей только ради *. 1003 *

2 голосов
/ 03 февраля 2011

Прежде чем давать какие-либо ответы, я хотел бы начать с вопроса о том, зачем мне хранить эту хэш-таблицу на диске, поскольку, согласно вашему описанию, набор данных невелик, и поэтому я предполагаю, что он может уместиться в памяти. Если это просто возможность повторно использовать эту структуру после перезапуска вашего приложения, то вы, вероятно, можете использовать любой формат для его сохранения.

Во-вторых, вы не указываете причин, по которым Redis или MongoDB не являются идеальными. Исходя из ваших (коротких) 3 требований, я бы сказал, что Redis, вероятно, ваш лучший выбор:

  • хороших клиентов Java
  • не только способен хранить списки, но также поддерживает операции со значениями списка (поэтому данные не непрозрачны)

Единственная причина, по которой я могу предположить устранение Redis, это то, что вы ищете строгие характеристики ACID. Если это то, что вы ищете, вы могли бы взглянуть на BerkleyDB JE. Это было давно, и документация хорошая.

2 голосов
/ 03 февраля 2011

Проверьте JDBM2 - http://code.google.com/p/jdbm2/

Я работал над базой кода JDBM 1 и был впечатлен тем, что видел в jdbm2

0 голосов
/ 09 июля 2016

Хроническая карта должна идеально подходить, это встраиваемое хранилище значений ключей, написанное на чистом Java, поэтому оно действует как наилучший из возможных «клиент» (хотя на самом деле «клиент» или «нет»)сервер ", вы просто открываете свою базу данных и получаете полный доступ к ней для чтения / обновления).

Карта хроники находится в одном файле.Этот файл можно перемещать по файловой системе и даже отправлять на другой компьютер с другой ОС и / или архитектурой, и при этом он может быть открываемой базой данных Chronicle Map.

Для создания или открытия хранилища данных (если файл базы данных не-существует, создается, в противном случае доступ к существующему хранилищу):

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, не беспокоясь о сериализации ключей и значений,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...