BelStudent
целеустремлённый чел
Необычная оптимизация
Даже трудно сформировать вопрос одним предложением, поэтому предыстория.
Есть сайт, на сайте поиск. Поиск обрабатывает большое количество информации из БД прежде чем выдать ответ, поэтому довольно длителен. Запросы в поиск подаются однотипные, поэтому я решил оптимизировать систему. Я сохраняю сразу html-страницу с результатом, а сам запрос сохраняю в БД. При повторном поиске просматриваю БД на наличие запроса, если запрос был, то возвращаю уже сгенерированную страницу, если нет - то запускаю все процессы поиска.
Теперь собственно проблема: если 2 человека нажали одновременно кнопку поиска, с абсолютно одинаковыми запросами, то происходит следующее. Скрипт проверяет наличие запроса в БД, его нет и 2 сценария одновременно сохраняют в кеш одинаковые страницы, а главное ДОБАВЛЯЮТ в БД одинаковые запросы. И если придёт новый пользователь и введёт этот запрос, то скрипт находит 2 соответствия в БД. Конечно вы скажите, что выдавай первый результат и всё. НО, представьте если одновременно нажмёт поиск 100 человек, то сгенерится 100 html-страниц (что не столь важно) и добавиться 100 абсолютно одинаковых запросов (что посерьёзнее). Так как добиться того чтобы был записан 1 запрос и сгенерирована 1-а страница при одновременном нажатии на кнопку при одинаковых запросах?
P.s. не интересуют ответы типа: да у тебя такого нигода не будет, что за сайт с такой посещаемосью. Отвечать только по делу.
Даже трудно сформировать вопрос одним предложением, поэтому предыстория.
Есть сайт, на сайте поиск. Поиск обрабатывает большое количество информации из БД прежде чем выдать ответ, поэтому довольно длителен. Запросы в поиск подаются однотипные, поэтому я решил оптимизировать систему. Я сохраняю сразу html-страницу с результатом, а сам запрос сохраняю в БД. При повторном поиске просматриваю БД на наличие запроса, если запрос был, то возвращаю уже сгенерированную страницу, если нет - то запускаю все процессы поиска.
Теперь собственно проблема: если 2 человека нажали одновременно кнопку поиска, с абсолютно одинаковыми запросами, то происходит следующее. Скрипт проверяет наличие запроса в БД, его нет и 2 сценария одновременно сохраняют в кеш одинаковые страницы, а главное ДОБАВЛЯЮТ в БД одинаковые запросы. И если придёт новый пользователь и введёт этот запрос, то скрипт находит 2 соответствия в БД. Конечно вы скажите, что выдавай первый результат и всё. НО, представьте если одновременно нажмёт поиск 100 человек, то сгенерится 100 html-страниц (что не столь важно) и добавиться 100 абсолютно одинаковых запросов (что посерьёзнее). Так как добиться того чтобы был записан 1 запрос и сгенерирована 1-а страница при одновременном нажатии на кнопку при одинаковых запросах?
P.s. не интересуют ответы типа: да у тебя такого нигода не будет, что за сайт с такой посещаемосью. Отвечать только по делу.