База данных ключ-значение с клиентом Java

2

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

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

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

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

  • 0
    Почему они не идеальны для ваших целей?
Теги:
database
redis
nosql

5 ответов

2
Лучший ответ

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

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

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

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

4

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

  • 2
    Space4j также предлагает прозрачный кластер и индексацию.
3

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

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

2

Посмотрите JDBM2 - http://code.google.com/p/jdbm2/

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

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню