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

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

11
Alec Smart 8 Июн 2009 в 15:36

5 ответов

Лучший ответ

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

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

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

21
linead 8 Июн 2009 в 12:32

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

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

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

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

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

3
Swan 29 Ноя 2010 в 14:49

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

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

2
Shoan 9 Июн 2009 в 19:32

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

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

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

1
Vinko Vrsalovic 8 Июн 2009 в 11:44

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

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

0
Community 23 Май 2017 в 10:34