Упорядоченный постоянный кеш

Мне нужен постоянный кеш, который вмещает до нескольких миллионов 6-символьных строк base36 и имеет следующее поведение: - Когда клиенты извлекают N строк из кэша, они извлекаются в порядке значения base36, например, AAAAAA, затем AAAAAB и т. Д. - Когда строки извлекаются, они также удаляются из кэша, поэтому ни один другой клиент не получит такие же строки.

В настоящее время я использую MapDB в качестве постоянного кэша (я бы использовал EHCache, но для постоянного хранения требуется лицензия).

MapDB дает мне карту, с которой я могу помещать / получать элементы, и обрабатывает постоянные данные на диске.

Я заметил, что Java ConcurrentSkipListMap класс поможет в моей проблеме, так как он обеспечивает порядок, и я также могу позвонить pollFirstEntry метод для извлечения / удаления элементов по порядку.

Я не уверен, как я могу использовать это с MapDB, хотя. Есть ли у кого-нибудь совет, который может помочь мне достичь описанного мной поведения?

Спасибо

1 ответ

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

То, что вы описываете (упорядоченный набор элементов, потребляемых клиентами в фиксированном порядке), больше похоже на рабочую очередь. Вместо того, чтобы смотреть на решения для кэширования, попробуйте постоянные очереди, такие как RabbitMQ, Kafka, bigqueue и т. Д.

Другие вопросы по тегам