Получаем от пользователя запрос. С помощью магии получаем кучу json'a по запросу. Иногда это может занимать 2-3 секунды, а иногда и до 10 подскакивает. Я так подумал, что не плохо бы кешировать результаты запросов хотя бы на 15 минут. Как показывает практика, пользователь может легко 2-3 раза послать один и тот же запрос.
Ближе к делу - есть БД MySQL. Вот что я выдумал:
- Создать таблицу cache, c полями: id, search_text, datetime. id - все понятно, search_text - текст запроса, datetime - дата и время запроса
- У этой таблицы - создать подчиненную, со следующими полями: cache_id, source, json. cache_id - указываем, какому запросу принадлежит строка, source - источник данных, json - результат. Источников может быть много, по этому, одному запросу может принадлежать много результатов
Но мне кажется, это не оптимальный вариант, в силу ряда причин:
- Что делать, если несколько пользователей одновременно вбивают один и тот же запрос? Если записи в кеше нет, то пойдут запросы от всех пользователей. Мне кажется, можно решить эту проблему внедрив некий «state» для кеша. Например, state_fetch - ожидание получения результатов, state_received - данные получены и готовы к использованию. Соответственно, при запросе проверять этот state, если идет получение - ждать. Но и это не оптимальный вариант, что если данные так и не пришли? Мало ли че там на стороне будет.
- Нужно контролировать актуальность данных. Как лучше это реализовать? Перед каждым запросом чистить базу от старых данных? Не медленно ли получится?
В общем, поможите, товарищи.