Я ищу подходящую структуру данных для своего рода кэширования запросов для нашего веб-сервиса .net, который получает XML как запрос и возвращает XML как результат.
Процесс выглядит следующим образом: пользователь задает строку запроса (размером ~ 2 КБ) и получает результат (размером ~ 50 КБ). Последние n запросов с соответствующими результатами кэшируются, поэтому нам нужен запрос поиска O (1) -> результат. Если кэш заполнен (cache_size = n), самый старый элемент должен быть удален из кэша.
Итак, в конце мне нужна структура данных, которая работает в основном как очередь (постановка в очередь и удаление из нее в O (1)), но также поддерживает поиск O (1) для элемента, подобного словарю.
Моей первой идеей было использование словаря, который сопоставляет запрос с результатом. Для отслеживания порядка элементов я бы использовал очередь, которая также содержит запросы. Но проблема в том, что я бы потратил впустую память и, и все медленнее, чтобы сделать все эти поиски, которые длинные строки запроса. Я мог бы использовать другой словарь, который сопоставляет запросы с созданным уникальным значением идентификатора, поэтому строки запроса содержатся только в одной коллекции.
Нет ли более простого и эффективного решения для этой простой задачи?