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