Хранить в данных сеанса и хранить в базе данных Sql для временных данных

Мне интересно, что более эффективно хранить временные данные (связанные с этим сеансом) в сеансе, используя переменную $_SESSION в PHP или хранить и извлекать из базы данных SQL?

Спасибо за ваше время.

Ответ 1

Помните, что переменная сеанса поддерживается механизмом хранения, то есть когда запрос заканчивается, сеанс записывается обработчиком сеанса, по умолчанию это файл. По следующему запросу он вытаскивается из этого файла (или что-то еще, что использует обработчик сеанса).

Если вы читаете и записываете эти данные по каждому запросу, просто придерживайтесь переменных $_SESSION, накладные расходы на подключение, запрос и обновление базы данных не будут быстрее, чем $_SESSION по умолчанию.

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

Ответ 2

Я мало знаю о чтении из базы данных или файла, но я не думаю, что "доступ к DB медленнее, чем другие" - это правда. На уроках школы я узнал, что латентность сети незначительна по сравнению с доступом к вводу/выводу. И если мы используем БД для сеансов, у нас есть некоторые преимущества:

Нам не нужно беспокоиться о многих серверах, потому что нет никакой файловой системы.

Я также считаю, что хранение/чтение чего-либо в/из базы данных проще, чем файловая система.

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

Если я ошибаюсь, пожалуйста, поправьте меня. У меня еще есть чему поучиться. Спасибо.

Ответ 3

Это зависит от объема данных, которые вы собираетесь хранить, и объема трафика, который вы собираетесь обрабатывать. Если данные минимальны и сайт не должен масштабироваться за пределами одного веб-сервера, обязательно используйте обработчик сеанса по умолчанию, который записывает данные сеанса в файловую систему веб-сервера.

Если вам нужно масштабировать за пределы одного окна, рекомендуется хранить данные сеанса в базе данных памяти, например, в memcached или обычной базе данных. Вы можете переопределить обработчик сеанса в PHP и написать собственную реализацию для хранения в базе данных при использовании $_SESSION.

Ответ 4

Что более эффективно будет зависеть от объема данных, которые вы хотите сохранить, и от того, что вы планируете делать с временными данными. Я иногда хранили 5 мегабайт в данных сеанса в хранилище файлов, и это был ужасный убийца производительности. Но 5 мегагр. Состояний ужасно много, и вам действительно не следует туда добраться.

В любом случае вы можете настроить сеансы PHP сохраненные в таблице базы данных и получить лучшее из обоих миров.

Тем не менее, если данные не являются должным образом характерными для пользовательского сеанса, то вы не должны использовать сеансы и вместо этого использовать какой-либо объект модели.

Ответ 5

Сессии PHP быстрее, чем доступ к БД. Но у сеансов PHP есть некоторые известные проблемы.

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