php — что быстрее вызвать mysql connection запрос ИЛИ вызвать файл данных?

#php #mysql #performance #file #caching

#php #mysql #Производительность #файл #кэширование

Вопрос:

добрый вечер,
у меня есть таблица mysql, содержащая данные пользователей
, и я использую mysql_connect, mysql_query, mysql_fetch_array ее для извлечения пользовательских данных
. этот запрос должен выполняться при каждой загрузке страницы и для тысяч пользователей
, так что лучше и быстрее? использование mysql для каждой загрузки страницы?
ИЛИ кэшировать все результаты пользовательских данных в файле и включать его?

Комментарии:

1. Почему вы не кэшируете запрос mysql с помощью memcache?

2. У вас уже есть тысячи пользователей или это только ваши мечты?

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

4. @zerkms, нет для обоих.. я работаю в проекте, который наверняка будет иметь огромный трафик…

5. Также: почему вы используете устаревшие функции mysql для того, что кажется новым проектом? Используйте PDO.

Ответ №1:

Я думаю, что правильный ответ — mix. Вы должны кэшировать наиболее распространенный результат запроса и повторить другой «на лету»

Ответ №2:

Если это пользовательские данные для зарегистрированных пользователей, я бы сохранил их пользовательскую информацию в сеансе, а не извлекал ее снова и снова.

Если он будет часто меняться, и вы беспокоитесь о производительности базы данных, хорошим вариантом было бы кэшировать данные, используя что-то вроде memcached для кэширования данных в памяти. Вы можете запрашивать данные из кэша при каждом запросе, и если информация о пользователе изменится, просто обновите кэш, и при следующем извлечении он получит новые данные, и нет необходимости обращаться к базе данных, если запись в кэше не существует.

Комментарии:

1. привет, drew010. у меня уже есть сеанс для этого. но этот сеанс должен быть проверен из mysql, поэтому я использую для него запрос mysql.. я никогда не использовал memcached, но хранение данных в памяти увеличит нагрузку на память, верно? мне нужно что-то быстрое и лучшее, а не загружать базу данных или память…

2. Объем требуемой памяти зависит от того, сколько данных вы будете хранить на пользователя и сколько пользователей у вас есть, это может быть на отдельном сервере или на том же сервере, что и ваш сайт. Я не вижу лучших вариантов, чем кэш памяти или выборка из базы данных, если необходимо. Вы можете включить кэш запросов в mysql, чтобы он мог хранить результаты запросов, которые не изменились. Если информация о пользователе изменится, вы можете записать ее в файл, который можно проверить, но это, вероятно, не принесет вам много пользы и добавит сложности.

3. @al-dr: память дешевле, чем процессорный или дисковый ввод-вывод. Поэтому для «большого сайта, у которого уже есть огромный трафик», не должно быть проблемой купить еще немного оперативной памяти

4. да, и распределенный кэш, такой как memcached, помогает, потому что, если вы запускаете memcached на 2 серверах и выделяете 2 ГБ оперативной памяти для каждого кэша, вы получаете 4 ГБ общего пространства кэша, а не 2 ГБ. Это потому, что он распределяет его по всем серверам. 4 ГБ кэша, вероятно, могут хранить приличное количество пользовательских данных в зависимости от того, сколько их информации вам нужно кэшировать.

5. @zerkms, так зачем использовать mysql_query для выбора col1, col2, col3, col4, в то время как мы можем просто использовать один запрос для каждого столбца и извлекать тему внутри цикла ?!!! как ты думаешь, моя дорогая? почему вы пытаетесь усложнить это? из ваших ответов вам нужно, чтобы я сначала использовал что-либо, а затем попытался выполнить поиск для обновления кода и уменьшения нагрузки на память!!! я не думаю, что это вообще разумно …. спасибо..