Java On-Memory Efficient Key-Value Store

У меня есть хранилище 111 миллионов пар ключ-значение (один ключ может иметь несколько значений - максимум 2/3), чьи ключи представляют собой 50-битные целые числа, а значения - 32-битные (максимум) целые числа. . Итак, мои требования таковы:

  1. Быстрая вставка пары (ключ, значение) [разрешение дублирования]
  2. Быстрое извлечение значения/значений на основе ключа.

Хорошее решение дано здесьна основе MultiMap. Тем не менее, я хочу хранить больше пар ключ-значение в основной памяти без/небольшого снижения производительности. Из веб-статей я узнал, что B+ Tree, R+ Tree, B Tree, Compact Multimap и т. д. могут быть хорошим решением для этого. Может ли кто-нибудь помочь мне:

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

NB: я пробовал с HashMultiMap (Guava с некоторыми модификациями с trove), как упоминал Луи Вассерман, Kyoto/Tokyo Cabinet и т.д. и т.п. Мой опыт не очень хорош с решениями на диске. Поэтому, пожалуйста, избегайте этого :). Еще один момент заключается в том, что для выбора библиотеки / ds есть один важный момент: ключи 50-битные (поэтому, если мы назначим 64-битные), 14-битные будут потеряны, а значения 32-битные Int (максимум) - в основном они 10-12-14 бит.Таким образом, мы можем сэкономить место и там.

9
задан Community 23 May 2017 в 00:28
поделиться