Переменные сеанса против таблицы MySQL - PullRequest
2 голосов
/ 05 августа 2011

Я планирую сохранять часто используемые пользователями параметры, например, имя, изображение и т. Д., В переменных сеанса, а не извлекать их из таблицы MySQL каждый раз, когда они необходимы.Сохранение часто используемых параметров в переменных в отличие от базы данных в теории должно быть более эффективным, но, поскольку я не уверен, как сохраняются переменные SESSION, я не слишком уверен, правда ли это.Кто-нибудь знает, если вытащить информацию.из переменной SESSION более эффективен, чем запрос к таблице MySQL?

Термин «переменная» используется свободно, так как «переменные» СЕССИИ хранятся в файлах во временном каталоге сервера.

Можно подумать, что чтение файлов обходится дороже, чем чтение базы данных, я имею в виду, чтоЧто такое база данных, по сути, файл, но она оптимизирована для этой цели, в отличие от «временных файлов сеанса»

Ответы [ 5 ]

3 голосов
/ 05 августа 2011

Да, извлечение информации из переменной сеанса более эффективно, чем запрос базы данных для этой информации. Однако загрузка информации INTO переменных сеанса требует чтения файла из файловой системы вашего сервера и в ОЗУ, что в зависимости от многих факторов (скорость диска, загрузка ввода-вывода, скорость дБ и т. Д.) Может быть медленнее или быстрее, чем читать ту же информацию из БД. Без информации о вашей конкретной настройке сложно сказать. Следует помнить одну вещь: если вы планируете расширять и использовать более одного веб-сервера, вам нужно будет написать несколько пользовательских обработчиков сессий для хранения ваших сессий на центральном сервере (возможно, в базе данных), memcache или общего монтирования Точка, в которую все ваши веб-серверы могут перейти для получения файлов сеанса

В конце концов, положить что-то в сеанс и использовать его оттуда может быть более эффективным, чем каждый раз загружать его из БД, но вы все равно загружаете его из куда-то, и так, знание вашего оборудования и ваших настроек будет вашим лучшим руководством.

2 голосов
/ 05 августа 2011

Обработчик сеанса по умолчанию для PHP сохраняет эту информацию на диск; один уникальный временный файл за сеанс. Проблемы, с которыми вы можете столкнуться, заключаются в том, что дисковая / файловая система перегружена или ваши данные устарели.

Если вы обращаетесь к диску, чтобы получить доступ к сеансу, издержки немного меньше, чем при доступе к MySQL, но вы все равно отправляетесь на диск при каждом запросе страницы. Вы можете попробовать использовать обработчик сеанса в памяти.

1 голос
/ 05 августа 2011

Переменные сеанса предпочтительны для сохранения относительно небольшого количества временных данных.Они хороши для "сессий".

Используйте базу данных для всего остального.Специально для:

  • больших объемов данных,
  • для любого типа "транзакций" или
  • для данных, которые необходимо сохранить между "сеансами".

Эта статья несколько устарела и не относится к PHP как таковой ... но она должна дать вам некоторое представление об относительной эффективности файловой системы (например, NTFS) по сравнению с базой данных (например, MSSQL):

0 голосов
/ 05 августа 2011

Да, это более эффективно. Сессия сохраняется на сервере. Однако с сеансами или без них вам необходимо проверить, вошел ли пользователь в систему и имеет ли он правильный идентификатор SESSION. Это зависит от количества ваших столбцов, строк и многого другого

0 голосов
/ 05 августа 2011

Да, более эффективно использовать переменные сеанса. Обычно переменные сеанса хранятся на сервере в каталоге / tmp (вы можете проверить ваш PHP Info-файл, чтобы увидеть, как ваш настроен.

И поскольку они хранятся на сервере, вы можете предположить, что они так же безопасны, как и весь ваш сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...