【问题标题】:How to measure Django cache performance?如何测量 Django 缓存性能?
【发布时间】:2010-10-24 03:26:28
【问题描述】:

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

我将数据库用作缓存和会话后端。我听说过很多关于为此目的使用 Memcached 的好消息,我肯定想试一试。但是,我想确切地知道这种更改的好处是什么:我想我的站点可能还不够大,无法让更好的缓存后端有所作为。关键是:安装和配置 memcached 的人不是我,我也不想白白浪费别人的时间。

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

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

【问题讨论】:

    标签: python django postgresql caching memcached


    【解决方案1】:

    简短的回答:如果你有足够的内存,memcached 总是会更快。您无法真正对 memcached 与数据库缓存进行基准测试,但请记住,服务器的最大瓶颈是磁盘访问,特别是写入访问。

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

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

    【讨论】:

    • 知道使用 memcache 会比使用 db 更快。问题是它是否会更快足够来证明更改配置的合理性。
    【解决方案2】:

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

    缓存的内容:

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

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

    【讨论】:

      【解决方案3】:

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

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

      结果通常会让人震惊,因为性能提升非常好。

      【讨论】:

        【解决方案4】:

        使用django-debug-toolbar查看SQL查询节省了多少时间

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2011-11-08
            • 2019-02-10
            • 1970-01-01
            • 1970-01-01
            • 2015-08-18
            • 2010-09-25
            • 2011-01-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多