关于Django / Postgres应用程序缓存的建议

时间:2015-02-25 19:51:45

标签: django postgresql caching

我正在构建一个Django Web应用程序,我想要一些关于缓存的建议。我对缓存知之甚少。我读过the caching chapter in the Django book,但我正在努力将其与现实世界的情况联系起来。

我的应用程序将成为包含大量数据(150GB服务器日志)的Postgres数据库的Web前端。

数据库是只读的:应用程序的目的是为用户提供一种查询数据的简单方法。例如,用户可能会在日期A和B之间询问服务器X的所有行。

所以我的数据库需要支持非常快速的读取操作,但它不需要担心写入操作(很多 - 我会每隔几个月添加一次新数据,并且无论需要多长时间) 。

如果发出相同请求的客户端可以使用缓存,而不是再次调用Postgres数据库,那将是很好的。

但我不知道我应该关注什么样的缓存:Web缓存或数据库缓存。或者即使Postgres是最好的选择(我只是喜欢使用它,因为它与Django配合得很好,并且非常强大)。有人可以建议吗?

Django书中说memcached是Django的最佳缓存,但它在内存中运行,其中一些查询的结果可能是几GB,因此memcached可能会快速填满机器的内存。但也许我并不完全理解memcached的运作方式。

2 个答案:

答案 0 :(得分:1)

您的查询绝不应返回数GB的数据。没有实际的理由这样做,因为用户不能一次吸收那么多数据。您的结果集应该被分页,这样用户一次只能看到10,25个结果。然后,您还可以将查询限制为仅从基于页码的特定索引开始一次获取10,25个记录。

尽管如此,缓存搜索结果页面并不是一个特别好的主意。首先,不同用户曾经执行完全相同的搜索的几率非常小,并且您最终会浪费RAM来缓存永远不会再次使用的结果集。此外,像日志这样的东西应该是实时的。如果您返回缓存的结果集,则可能会出现未包含的新的相关结果,从而模糊了搜索的有用性。

答案 1 :(得分:0)

如上所述,您对缓存可以解决的问题有所限制。在构建此应用程序时,我认为没有理由不能只插入Django Haystack和Whoosh并查看其执行情况,然后切换到其他一些企业搜索后端是轻而易举的。