Хранить в данных сеанса против хранения в базе данных Sql для временных данных - PullRequest
11 голосов
/ 08 июня 2009

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

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

Ответы [ 5 ]

21 голосов
/ 08 июня 2009

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

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

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

3 голосов
/ 29 ноября 2010

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

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

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

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

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

2 голосов
/ 09 июня 2009

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

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

1 голос
/ 08 июня 2009

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

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

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

0 голосов
/ 08 июня 2009

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

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

...