Мне интересно, что более эффективно хранить временные данные (связанные с этим сеансом) в сеансе, используя переменную $_SESSION в PHP или хранить и извлекать из базы данных SQL?
Спасибо за ваше время.
Мне интересно, что более эффективно хранить временные данные (связанные с этим сеансом) в сеансе, используя переменную $_SESSION в PHP или хранить и извлекать из базы данных SQL?
Спасибо за ваше время.
Помните, что переменная сеанса поддерживается механизмом хранения, то есть когда запрос заканчивается, сеанс записывается обработчиком сеанса, по умолчанию это файл. По следующему запросу он вытаскивается из этого файла (или что-то еще, что использует обработчик сеанса).
Если вы читаете и записываете эти данные по каждому запросу, просто придерживайтесь переменных $_SESSION, накладные расходы на подключение, запрос и обновление базы данных не будут быстрее, чем $_SESSION по умолчанию.
Вероятно, вы захотите использовать только поддержку базы данных, если вы используете несколько серверов с балансировкой нагрузки и должны делиться данными сеанса между ними. В этом случае, если вы обнаружите, что накладные расходы на сеансы базы данных замедляют работу вашего сайта до заметной степени, вы можете подумать о том, чтобы сохранить memcached между вашим веб-сервером и базой данных.
Я мало знаю о чтении из базы данных или файла, но я не думаю, что "доступ к DB медленнее, чем другие" - это правда. На уроках школы я узнал, что латентность сети незначительна по сравнению с доступом к вводу/выводу. И если мы используем БД для сеансов, у нас есть некоторые преимущества:
Нам не нужно беспокоиться о многих серверах, потому что нет никакой файловой системы.
Я также считаю, что хранение/чтение чего-либо в/из базы данных проще, чем файловая система.
Кроме того, если мы используем общий хостинг, хранение сеансов в базе данных является основным преимуществом безопасности.
Если я ошибаюсь, пожалуйста, поправьте меня. У меня еще есть чему поучиться. Спасибо.
Это зависит от объема данных, которые вы собираетесь хранить, и объема трафика, который вы собираетесь обрабатывать. Если данные минимальны и сайт не должен масштабироваться за пределами одного веб-сервера, обязательно используйте обработчик сеанса по умолчанию, который записывает данные сеанса в файловую систему веб-сервера.
Если вам нужно масштабировать за пределы одного окна, рекомендуется хранить данные сеанса в базе данных памяти, например, в memcached или обычной базе данных. Вы можете переопределить обработчик сеанса в PHP и написать собственную реализацию для хранения в базе данных при использовании $_SESSION.
Что более эффективно будет зависеть от объема данных, которые вы хотите сохранить, и от того, что вы планируете делать с временными данными. Я иногда хранили 5 мегабайт в данных сеанса в хранилище файлов, и это был ужасный убийца производительности. Но 5 мегагр. Состояний ужасно много, и вам действительно не следует туда добраться.
В любом случае вы можете настроить сеансы PHP сохраненные в таблице базы данных и получить лучшее из обоих миров.
Тем не менее, если данные не являются должным образом характерными для пользовательского сеанса, то вы не должны использовать сеансы и вместо этого использовать какой-либо объект модели.
Сессии PHP быстрее, чем доступ к БД. Но у сеансов PHP есть некоторые известные проблемы.
Вы можете захотеть просмотреть memcached, если хотите очень быстрое время доступа, одновременно избегая ловушек управления сеансом PHP.