Подтвердить что ты не робот

Занятия Django

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

4b9b3361

Ответ 1

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

Бэкэкс memcache намного быстрее, чем бэкэнд базы данных, но вы рискуете очистить сеанс и потерять некоторые ваши данные сеанса.

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

Ответ 2

Я не эксперт по Django, поэтому этот ответ касается магазинов сеансов в целом. Downvote, если я ошибаюсь.

Производительность и масштабируемость

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

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

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

Простота

Выбор хранилища сеансов также повлияет на то, как легко развертывать ваш сайт. Переход от дефолта будет стоить некоторой сложности. Memcached и RDBMS имеют свои сложности, но ваше приложение, вероятно, будет использовать RDBMS.

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

Bonus

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

Ответ 3

По состоянию на Django 1.1 вы можете использовать конец сеанса cached_db.

Сохраняет сеанс в кеше (используется только с memcached) и записывает его обратно в БД. Если он выпал из кеша, он будет считан из базы данных.

Хотя это медленнее, чем просто использование memcached для хранения сеанса, он добавляет сохранение в сеанс.

Для получения дополнительной информации см. Django Docs: Использование кешированных сеансов

Ответ 4

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

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

Ответ 5

Если в базе данных есть администратор базы данных, который вам не нужен, вам не разрешается использовать сеанс с поддержкой базы данных (это только внешний вид). До тех пор, пока django не упростит объединение данных из нескольких баз данных, чтобы вы могли иметь такие специфичные для интерфейса элементы, как сеансы и пользовательские сообщения (сообщения в django.contrib.auth также хранятся в db) в отдельном db, вам нужно сохранить это в виду.