Каковы плюсы / минусы хранения данных сеанса в файле по сравнению с базой данных? - PullRequest
6 голосов
/ 28 июня 2011

При создании веб-сайта необходимо решить, как хранить информацию о сеансе, когда пользователь вошел в систему.

В чем преимущества и недостатки сохранения каждого сеанса в отдельном файле по сравнению с сохранением его вбаза данных?

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

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

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

  2. Вы можете использовать сервер состояний в asp.net для доступа к нескольким серверам - это работает вне процесса вашего веб-сервера. Если веб-процесс перезапускается - у вас все в порядке, и несколько серверов получают к нему доступ. Этот трафик, поступающий на сервер состояний, не зашифрован, и в идеале вы должны использовать политики IPSEC для защиты трафика в более безопасной среде.

  3. Вы можете использовать сервер SQL для управления состоянием (автоматически), настроив web.config для использования сервера SQL в качестве базы данных сеанса. Это дает преимущество высокопроизводительной базы данных и многосерверного доступа.

  4. Вы можете использовать свои собственные сеансы в базе данных, если вы хотите, чтобы они сохранялись в течение долгого времени вне обычного механизма и хотели более жестко контролировать поля базы данных (возможно, вы хотите запросить определенные поля)

Также просто из любопытства - может быть, вы называете сеансы предпочтениями пользователя? В этом случае исследуйте профили asp.net

1 голос
/ 30 июня 2011

Я предполагаю, основываясь на ваших предыдущих вопросах, что это задается в контексте использования модуля CGI :: Application в Perl с CGI :: Application :: Plugin :: Session. Если вы используете этот модуль с настройками по умолчанию, он запишет данные сеанса в файлы, хранящиеся в каталоге / tmp, что очень похоже на то, что делает PHP. Если ваше приложение работает в среде общего хостинга, вы, вероятно, НЕ хотите этого делать из соображений безопасности, поскольку другие пользователи могут просматривать / изменять данные в / tmp. Вы можете исправить это, записав файлы в каталог, который только у вас есть разрешение на чтение / запись (т.е. не / tmp). При разработке я предпочитаю использовать YAML для сериализации, а не по умолчанию (хранимую), поскольку она удобочитаема. Если у вас есть собственный веб-сервер и вы можете запустить сервер базы данных (mysql) на том же компьютере, то сохранение данных сеанса в базе данных вместо файла обычно приводит к более высокой производительности, особенно если вы можете поддерживать постоянное соединение с базой данных (т. е. используя mod_perl или fastcgi). НО - если ваша база данных находится на удаленном хосте, и вам нужно открывать новое соединение каждый раз, когда вам нужно обновить данные сеанса, тогда производительность может фактически ухудшиться, а запись в файл может быть лучше. Обратите внимание, что вы также можете использовать sqlite, который выглядит как база данных для вашего приложения, но на самом деле это просто файл в вашей локальной файловой системе. Независимо от производительности, вариант базы данных может быть нежелателен в средах с общим хостом из-за ограничений пропускной способности и других ограничений ресурсов. Разница в производительности также, вероятно, незначительна для сайта с низким трафиком (то есть несколько тысяч посещений в день).

1 голос
/ 28 июня 2011

Asp.net не облегчает сохранение сессии в файле, хотя я не уверен насчет ror.Однако хранение сеанса в памяти (того же процесса) происходит быстрее, чем в бд.Наличие этого в БД может улучшить масштабируемость вашего приложения (в случае, если вы хотите развернуть свое приложение в среде веб-фермы - все серверы имеют общую (db) для поиска сеанса).

Эта статья проекта кода дает очень хорошее представление об управлении сессиями asp.net.

...