如何衡量Django缓存性能?

时间:2009-05-06 08:56:45

标签: python django postgresql caching memcached

我有一个在Django上运行的相当小的(每天大约4.5k的综合浏览量)网站,PostgreSQL 8.3作为数据库。

我使用数据库作为缓存和sesssion后端。为了这个目的,我听说过很多关于使用Memcached的好东西,我肯定想尝试一下。但是,我想确切地知道这种改变会带来什么好处:我想我的网站可能不够大,无法让更好的缓存后端有所作为。关键是:我不会安装和配置memcached,我不想浪费任何时间或非常少的时间。

如何衡量使用db作为缓存后端引入的开销?我看过django-debug-toolbar,但如果我理解正确,那么你不想把它放在生产网站上(你必须设置DEBUG=True才能使它工作)。不幸的是,我无法完全重现笔记本电脑上的制作设置(我有不同的操作系统,CPU和更多的RAM)。

有没有人对不同的Django缓存/会话后端进行基准测试?有没有人知道如果我正在做什么会有什么性能差异,例如,每个请求都有一个会话写入?

5 个答案:

答案 0 :(得分:5)

在我之前的工作中,我们尝试测量缓存对我们正在开发的网站的影响。在同一台机器上,我们对最常用作起始页(对象列表)的10个页面的集合进行了负载测试,以及从~200000池中随机获取的一些对象详细信息页面。差异就像150请求/秒到30000请求/秒,数据库查询下降到每页1-2。

什么是缓存:

  • 会话
  • 在对象列表中为每个单独页面检索的对象列表
  • 次要对象和常见内容(在每页上找到)
  • 对象类别列表和其他分类属性
  • 对象计数器(由cron作业离线计算)
  • 个别对象

通常,我们只使用低级粒度缓存,而不是高级缓存框架。它需要非常仔细的设计(缓存必须在每次数据库状态更改时正确无效,例如添加或修改任何对象)。

答案 1 :(得分:3)

DiskCache项目发布Django cache benchmarks比较本地内存,Memcached,Redis,基于文件和diskcache.DjangoCache。 DiskCache的另一个好处是不需要单独的进程(与Memcached和Redis不同)。相反,缓存键和小值被内存映射到Django进程内存中。从缓存中检索值通常比localhost上的Memcached快。许多settings控制在内存中保留多少数据;其余的被分页到磁盘。

答案 2 :(得分:2)

简短的回答:如果你有使用ram,那么memcached将会更快。你不能真正对memcached与数据库缓存进行基准测试,请记住,服务器的主要瓶颈是磁盘访问,特别是写访问。

无论如何,如果您有许多要缓存的对象并且很长时间到期,则磁盘缓存会更好。但是对于这种情况,如果你想要演出,最好用python脚本静态生成你的页面并用ligthtpd或nginx传递它们。

对于memcached,您可以调整专用于服务器的ram数量。

答案 3 :(得分:0)

试一试。使用firebug或类似工具,在测试服务器上运行带有一点RAM分配(例如64mb)的内存缓存。

标记在没有memcache的情况下在firebug中看到的平均加载结果,然后打开缓存并标记新结果。这就像它说的一样容易。

结果通常会让人感到震惊,因为表现非常好。

答案 4 :(得分:0)

使用django-debug-toolbar查看SQL查询

上保存了多少时间