Python Django会议

Python Django会议,python,django,session,caching,mongodb,Python,Django,Session,Caching,Mongodb,我正在研究Django中的会话,默认情况下它们存储在数据库中。文件系统和缓存会话的好处是什么?我应该在什么时候使用它们?只有当您不打算将数据库用于系统的任何其他部分时,文件系统后端才值得一看。如果您使用的是数据库,那么文件系统后端没有什么可推荐的 memcache后端比数据库后端快得多,但您可能会面临会话被清除和部分会话数据丢失的风险 如果你是一个流量非常非常高的网站,请仔细编写代码,以便能够处理会话丢失的问题,然后使用memcache。如果您不使用数据库,请使用文件系统缓存,但在几乎所有情况下

我正在研究Django中的会话,默认情况下它们存储在数据库中。文件系统和缓存会话的好处是什么?我应该在什么时候使用它们?

只有当您不打算将数据库用于系统的任何其他部分时,文件系统后端才值得一看。如果您使用的是数据库,那么文件系统后端没有什么可推荐的

memcache后端比数据库后端快得多,但您可能会面临会话被清除和部分会话数据丢失的风险


如果你是一个流量非常非常高的网站,请仔细编写代码,以便能够处理会话丢失的问题,然后使用memcache。如果您不使用数据库,请使用文件系统缓存,但在几乎所有情况下,默认数据库后端都是最好、最安全和最简单的选择。

我不是Django专家,所以这个答案通常是关于会话存储的。如果我错了就投反对票

可扩展性 会话存储的选择会影响性能和可伸缩性。只有当您有一个非常流行的应用程序时,这才应该是一个大问题

数据库和文件系统会话存储(通常)都由磁盘支持,因此您可以廉价地拥有大量会话(因为磁盘便宜),但请求通常必须等待数据读取(因为磁盘速度慢)。Memcached会话使用RAM,因此支持相同数量的并发会话的成本会更高(因为RAM很昂贵),但可能更快(因为RAM很快)

文件系统会话绑定在应用程序运行的盒子上,因此,如果站点变得庞大,则无法在多个应用程序服务器之间实现负载平衡。数据库和memcached会话允许多个应用程序服务器与共享会话存储进行通信

简单 会话存储的选择还将影响站点部署的容易程度。更改默认值将花费一些复杂性。Memcached和RDBMS都有其自身的复杂性,但是您的应用程序可能会使用RDBMS

除非您有一个非常流行的应用程序,否则简单性应该是更大的关注点

奖金
另一种方法是存储(所有信息,而不仅仅是一个ID)。这样做的优点是会话存储会随着用户数量自动扩展,但也有缺点。您(或您的框架)需要小心阻止用户伪造会话数据。您还需要保持每个会话较小,因为每个请求都会发送整个会话。

选择会话后端时必须考虑的一件事是“修改会话数据的频率”?如果会话数据在每次请求时都被修改,那么即使是流量适中的站点也会受到影响,从而需要多次数据库访问来存储和检索数据


在我之前的工作中,我们专门使用memcache作为会话后端,它工作得非常好。我们的管理团队非常努力地使两个特殊的memcached实例像石头一样稳定,但是在对初始设置进行了一些调整之后,我们没有任何会话后端操作中断。

如果数据库有一个不是您的DBA,您可能不被允许使用数据库支持的会话(这只是一个前端问题)。直到django支持轻松合并来自多个数据库的数据,这样您就可以拥有特定于前端的内容,如会话和用户消息(django.contrib.auth中的消息也存储在数据库中)在单独的数据库中,您需要记住这一点。

从Django 1.1开始,您可以使用缓存的\u db会话后端

这会将会话存储在缓存中(仅与memcached一起使用),并将其写回数据库。如果会话已从缓存中丢失,则会从数据库中读取会话

尽管这比仅使用memcached存储会话要慢,但它为会话添加了持久性


有关更多信息,请参阅:

您应该知道,Django的新开发版本包括一个选项,它通过memcached写入数据库,这样即使memcached被清除、重置,您仍然可以手头上有会话。如果您在aws Django上,会话数据可以存储在dynamodb中,现在有一个基于cookie的会话backend另一个与扩展相关的有趣的事情是,如果您使用默认的数据库支持的会话存储,而不是使用RDBMS,那么您使用的MongoDB与MongoDB中的情况类似,从那时起,这就是一种方式。