@ds00lon

От куда информация скриптом получается быстрее, с сессий или базы данных?

Вопрос в том, откуда быстрее брать данные пользователя который залогинился.
В скрипте постоянно нужно использовать его логин и его настройки (5-8 переменных).
Стоит ли их при входе пользователя вставить в php сессии, или при каждом запросе брать из базы данных?

  1. Какой вариант быстрее?
  2. Какой вариант посоветуете?
  3. Почему?
  • Вопрос задан
  • 423 просмотра
Решения вопроса 5
opium
@opium
Просто люблю качественно работать
Если сессии хранятся в мемкеше или режиме то это самый быстрый вариант. Из файлов очень медленно как и из БД . кто даёт советы про БД тот буратино
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
если в бд нормально настроены индексы и вообще нормально настроена, то разницы в сокрости по сравнению в кеширующим сервером не будет при выборе таких небольших данных.

А если всё очень плохо то стоит посмотреть в сторону кеш-сервера под данные типа мемкеш/редис и т.д. Ну в крайнем случае можно и в сессию записывать. Но на больших объемах и балансировке для сессий надо использовать в любом случае какой-то мемкеш, поэтому данные можно хранить в сессии(если они не требуют калькуляций и вообще не очень большой объем)
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Берите из сессии.
В любом случае сессия (обычно из файла или из memcache) быстрее базы.
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Хранить в сессии. А саму сессию - в Redis / Memcached (то есть, в памяти).
Ответ написан
Комментировать
@izheme
Познаю мир
Используйте сессии. А вот где уже их будете хранить - дело третье. Неоспоримым плюсом сессий является то, что можете легко изменить их место/способ хранения не затрагивая логику приложения. По умолчанию сессии хранятся в файлах, но легко переделываются на хранение в БД (что позволяет очень гибко с ними работать, да и при больших объемах БД ведет себя увереннее файлов - несколько лет назад было так, может сейчас уже и файлы подтянулись), если не хватает скорости, то есть расширения для php которые хранилищем сессий делают в memcache или redis (в тяжелых проектах сам использую этот вариант - можно смело говорить о десятках тысяч сессий). Используя механизм сессий, вы сможете переключаться между типом хранения буквально за 5 минут.

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

Я думаю, нужно делать так, как вам удобнее. Универсального решения для абстрактного проекта не бывает. Оптимизировать на начальном этапе тут нечего.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы