Я на 70% прошел через разработку веб-приложения, которое содержит, по сути, крупномасштабные данные, насчитывающие около 50 000 строк.
Само приложение представляет собой приложение для фильтрации, обеспечивающее различные способы фильтрации этой таблицы, такие как фильтрация диапазона по номеру, фильтрация с перетаскиванием, которая в конечном итоге выполняет фильтрацию регулярных выражений, поиск в реальном времени и позволяет мне продолжать и продолжать.
В связи с этим я закодировал свои запросы MySQL модульным образом, чтобы сам фактический запрос динамически формировался в зависимости от типа выполняемой фильтрации.
На данный момент каждое фильтрующее действие (всего) занимает в среднем 250-350 мс. Например: -
Пользователь берет один конец визуального слайдера, перетаскивает его внутрь, когда он / она отпускает запрос на фильтрацию диапазона, который динамически соединяется моим PHP-кодом, и результаты возвращаются в виде ответа JSON. Общее время, от которого пользователь отпускает ползунок до тех пор, пока пользователь не получит все данные и таблица не будет перерисована, в среднем составляет 250-350 мс.
Я обеспокоен масштабируемостью в дальнейшем, поскольку от пользователей можно ожидать выполнения огромного количества фильтрующих действий за короткий промежуток времени для извлечения данных, которые они ищут.
Я пытался сделать какую-то необычную работу по истечению срока действия кэша с memcached, но не смог заставить его правильно играть в мяч с моими динамически генерируемыми запросами. Хотя все будет правильно кешироваться, у меня возникли проблемы с его окончанием при изменении запроса и сохранением данных. Я, однако, крайне неопытен с memcached. Мои первые несколько попыток привели меня к убеждению, что memcached не является подходящим инструментом для этой работы (из-за высокой динамической природы запросов. Хотя в конечном итоге это приложение может очень активно использоваться.
Итак ... Мой вопрос на самом деле заключается в том, есть ли какие-либо механизмы / уровни кэширования, которые я могу добавить к такого рода приложениям, которые могли бы уменьшить попадания на сервер? Учитывая динамические запросы.
Или ... Если memcached - лучший инструмент для работы, и мне не хватает части головоломки с моими ранними попытками, можете ли вы предоставить некоторую информацию или руководство по использованию memcached с приложениями такого рода?
Огромное спасибо всем, кто откликнулся.
РЕДАКТИРОВАТЬ: я должен упомянуть, что база данных MySQL. Сам сайт работает на Apache с прокси nginx. Но этот вопрос связан исключительно с ускорением и сокращением обращений к базе данных, которых много.
Я также должен добавить, что указанное время прохождения туда и обратно 250-350 мс полностью удалено. Как с удаленного компьютера, получающего доступ к веб-сайту. Время включает в себя поиск DNS, поиск данных и т. Д.