【问题标题】:Caching processed data in django在 django 中缓存处理过的数据
【发布时间】:2012-02-15 21:32:43
【问题描述】:

我有很多能量测量记录存储在模型中。

我的用户需要经常访问能源使用报告,因此 model.manager 负责查询大量记录,应用需要大约 2 秒的算法,这是很多时间,我测试了 memcached 但没有运气好,因为一段时间后缓存的数据不可用,但用户经常回来看到相同的报告。所以我对这个性能问题的潜在解决方案是将处理后的数据(不仅是查询集,还有算法应用后的数据查询集)存储在一个名为“ProcessedData”的模型中。

所以当提示用户访问能源报告时,负责的经理会先查询ProccessData,如果ProccessData.objects.filter(field1='field1').exist():返回的数据会直接传给模板进行可视化。如果所需的数据以前没有被要求,负责的经理将必须应用算法并将请求发送回用户。

这是一个好方法吗?

【问题讨论】:

    标签: django caching django-models


    【解决方案1】:

    在开始这样的事情之前,我肯定会尝试像 django-cache-machinejohnny-cache 这样的项目,他们会做模型缓存,而且做得很好。

    我认为 johnny cache 它更适合您的需求,因为它不会过期查询集缓存。

    我不确定您所说的“缓存数据不可用”是什么意思,但您可以通过多种方式轻松解决(例如,使用像 redis 这样的持久缓存后端)。

    如果您需要的不仅仅是查询集缓存,这是我将在您即将实施的数据库缓存之前尝试的另一件事。

    Django 缓存实用程序带有一个不错的缓存装饰器(@cached)(参见文档和示例here),它根据参数进行缓存

    【讨论】:

    • 当我使用查询结果作为输入处理数据时,我知道当我使用 johny-cache 的 memcache 时,查询甚至发送给用户的请求都被缓存了,当该数据出现时问题出现可能一天后的 12 小时后需要,在这种情况下,根据与其他用户的数据库交互量,最初缓存的已处理数据不可用。
    • 你试过类似 django-cache-utils 的 @cached 装饰器吗?将其与永不过期缓存的自定义缓存后端相结合(例如,johnny 缓存会这样做,因为 django 不支持“永远”),并且您拥有持久的结果缓存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多