Встраиваемое хранилище ключей на основе дисков - PullRequest
2 голосов
/ 06 января 2012

Мы работаем над проектом, который будет распространяться с использованием одного файла JAR.Нам нужно какое-то хранилище значений ключей со следующими свойствами:

  1. Встраиваемый в наш файл JAR, поэтому дополнительная установка не требуется.
  2. Может содержать до десятков миллионов пар
  3. Эффективная память.Это означает, что менее 100M для 50M пар
  4. Оба ключа и значения имеют простые типы: long, int, small byte []
  5. Бесплатная лицензия для коммерческого использования является бонусом
  6. Нам не нужен параллелизм, ACID или другие сложные вещи.
  7. Амортизированное время поиска менее 100 микросекунд.

Любые предложения, кроме BerkelyDB или JDBM2 / 3?

Ответы [ 2 ]

3 голосов
/ 06 января 2012

GNU Trove предлагает ряд карт (например, TIntIntHashMap ), которые более эффективны по памяти, чем стандартные карты Java, поскольку в них используются примитивные типы.Я сомневаюсь, что вы можете получить значительно больше памяти, чем это, если вы не знаете что-то о том, что вы храните.Trove - это более или менее LGPL, так что, вероятно, использовать его безопасно.Я не знаю, соответствует ли он вашим точным спецификациям, но я думаю, что стоит попробовать, когда вы можете разместить что-то в оперативной памяти.

Когда вам может понадобиться перейти на диск, Ehcache - этохороший выбор.Вы можете указать, что после определенного количества записей он будет хранить значения на диске (недавно в версии 2.5 вы можете указать после того, как определенное количество оперативной памяти будет использоваться, если вы не знаете, как точное количество записей).

0 голосов
/ 06 января 2012

Посмотрите на реализации noSQL, CouchDB, Cassandra и другие довольно хороши.

Сделайте поиск в Google, чтобы сравнить, вы найдете то, что вы хотите.

Мой любимый - mongoDb и, к сожалению, его нет

на основе Java

...