Как эффективно кэшировать пары запросов-ответов веб-сервисов в формате JSON - PullRequest
1 голос
/ 01 июня 2011

Я нахожу интересную проблему при работе с веб-сервисом в формате JSON.

Предположим, есть веб-сервис. принять несколько параметров. каждый параметр имеет разные значения. Вы можете получить ответ, передав различные параметры запроса.

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

Я думаю, что MongoDB может быть решением. Но я не уверен. Можно ли хранить запрос-ответ как пару ключ-значение в базе данных такого типа? Так что я могу кешировать результат и ответ пользователя сразу.

Спасибо.

1 Ответ

1 голос
/ 07 июня 2011

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

Вы можете использовать JSON в качестве ключа в любом хранилище ключей / значений, хотя, вероятно, имеет смысл использовать хэш в качестве ключа кэша, а не напрямую использовать строку JSON, и непостоянный кэш в памяти с memcached или Redis будет работать намного лучше, чем полная база документов, такая как MongoDB.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...