Есть сайт http://clip2net.com/s/3G9Jdd4 php+js+mysql и есть определенная проблема с нагрузкой на базу mysql и быстродействию запросов В данный момент js отправляет ajax запрос на пхп, пхп проверяет все позиции на кол.занятых.слотов и отправляет ответ с данными и в результате чего js меняет местами лоты и запрос посылается каждую секунду т.е 60зпросов за минуту и умножаем на условные 100 онлайна получаем 6000 запросов в бд за минуту и возникла такая идея что если запускать через крон пхп файл 1раз в секунду и который будет например создавать/редактировать json файл в котором будут записываться все данные лотов и так получится только 60 запросов за минуту, а у юзеров уже через js ajax идет загрузка этого json файла с данными и менять позиции и занятые слота лотов что думаете? поможет ли?
Поможет. Кэширование всегда помогает. Но вы слишком усложнили. Крон не нужен, все проще. При запросе пользователя, любого, проверяете, есть ли кэш. Если нет - генерируете. Если есть - проверяете, сколько ему времени. Если устарел, генерируете новый. Если не устарел - отдаете пользователю то, что есть. Таким образом, при стабильной посещаемости пользователи сами будут постоянно обновлять кэш. При понижении посещаемости, например, ночью, сервера не будут "молотить в холостую". Раз в секунду - это слишком часто, как по мне. В зависимости от качества сети, это может быть меньше, чем у пользователя до вас и обратно запросы пройдут, серьезно. Поставьте раз в 5-10 секунд, ничего страшного. Пользователь разницы не заметит, а серверу будет легче жить. Главное - уделите достаточно внимания блокировкам, чтобы не было проблем, когда, например, 100 человек разом навалятся на протухший кэш и начнут его обновлять. Но это все разруливается очень легко через родные пхпшные механизмы. Кроме того, проиндексируйте вашу БД, это может помочь. Если у вас структура БД с лотами совсем простая, то, вероятно, можно уйти в noSQL - решения. Они гораздо быстрее работают.
ну это так я просто в пример раз в секунду по nosql можете что нибудь посоветовать? а еще вопрос есть кнопка занять слот он занимает 200-400мс js+php+mysql, можно ли как то его убыстрить например до 50мс? при нажатии 2запроса в бд -> проверка -> запись в базу занятие слота, апдейт лота, апдейт юзера -> ответ
Редис-шмедис и иже с ними. Они в плане использования все похожие. Почитайте, подберите, что вам больше нравится. Кто ж его знает, что у вас там под капотом происходит на самом деле, какие запросы, какие проверки и тд. Это ж надо детально изучать, чтобы точно сказать. Если у вас все упирается в неоптимальные запросы, оптимизируйте запросы, если в неоптимальные алгоритмы - оптимизируйте алгоритмы. Если в скорость работы самой БД...вы уперлись в стену, масштабируйте сервер. Скачок от 400мс до 50мс - это, в общем-то, скачок в 8 раз. Это серьезные хотелки, и не факт, что выполнимые. В общем, профилирование покажет. Но можно зайти с другой стороны - насколько часто у вас происходят такие тяжелые операции? И нужно ли оно вообще, оптимизировать это место? Если у вас один такой запрос приходится на тысячу легких запросов, то овчинка может выделки не стоить.
Дело в том что я создал пустой пхп файл который просто Код (Text): <?php echo json_encode(array('message' => 'error test', 'error' => true)); ?> и отправил тот же запрос через ajax и ответ так же занял 200мс и вот думаю стоит ли тратить время на оптимизацию кода или думать в каком то другом направлении
200мс - это у вас время, за которое сервер отработал, или время, за которое ответ пришел? Это не одно и то же. Если второе, то тут решают нагруженность канала, расстояние до сервера и тд. Это может быть крайне индивидуальная фигня. Если первое, то, быть может, вам надо мощностей подкинуть.
от этого надо отказаться просто и перейти на постоянное подключение к серверу через вебсокеты или логпулинг