Django/Postgres 应用程序的缓存建议
Advice on caching for Django/Postgres application
我正在构建一个 Django 网络应用程序,我想要一些关于缓存的建议。我对缓存知之甚少。我读过 the caching chapter in the Django book,但我很难将它与我的真实情况联系起来。
我的应用程序将是包含大量数据(150GB 服务器日志)的 Postgres 数据库上的 Web 前端。
数据库是只读的:该应用程序的目的是为用户提供一种查询数据的简单方法。例如,用户可能会在日期 A 和 B 之间请求来自服务器 X 的所有行。
所以我的数据库需要支持非常快的读操作,但它不需要担心写操作(很多 - 我会每隔几个月添加一次新数据,不管多长时间需要)。
如果发出相同请求的客户端可以使用缓存,而不是再次调用 Postgres 数据库,那就太好了。
但我不知道应该查看哪种缓存:网络缓存或数据库缓存。或者即使 Postgres 是最佳选择(我只是想使用它,因为它与 Django 配合得很好,而且非常健壮)。谁能给点建议?
Django 的书说 memcached 是 Django 最好的缓存,但它在内存中运行,其中一些查询的结果可能是几 GB,因此 memcached 可能会很快填满机器的内存。但也许我并不完全理解 memcached 是如何运作的。
您的查询绝不能return数GB的数据。没有实际理由这样做,因为用户不能一次吸收那么多数据。您的结果集应该被分页,这样用户一次只能看到 10、25 个结果。这样一来,您还可以将查询限制为一次仅从基于页码的特定索引开始获取 10、25 条记录。
尽管如此,缓存搜索结果页面并不是一个特别好的主意。其一,不同用户 曾经 执行完全相同搜索的可能性非常小,您最终会浪费 RAM 来缓存永远不会再次使用的结果集。此外,日志之类的东西应该是实时的。如果您 return 一个缓存的结果集,可能会有未包含的新的相关结果,从而掩盖了搜索的实用性。
如上所述,缓存可以解决的问题有限。当您构建此应用程序时,我看不出您为什么不能只插入 Django Haystack 和 Whoosh 并查看它的性能,然后轻而易举地切换到其他一些企业级搜索后端。
我正在构建一个 Django 网络应用程序,我想要一些关于缓存的建议。我对缓存知之甚少。我读过 the caching chapter in the Django book,但我很难将它与我的真实情况联系起来。
我的应用程序将是包含大量数据(150GB 服务器日志)的 Postgres 数据库上的 Web 前端。
数据库是只读的:该应用程序的目的是为用户提供一种查询数据的简单方法。例如,用户可能会在日期 A 和 B 之间请求来自服务器 X 的所有行。
所以我的数据库需要支持非常快的读操作,但它不需要担心写操作(很多 - 我会每隔几个月添加一次新数据,不管多长时间需要)。
如果发出相同请求的客户端可以使用缓存,而不是再次调用 Postgres 数据库,那就太好了。
但我不知道应该查看哪种缓存:网络缓存或数据库缓存。或者即使 Postgres 是最佳选择(我只是想使用它,因为它与 Django 配合得很好,而且非常健壮)。谁能给点建议?
Django 的书说 memcached 是 Django 最好的缓存,但它在内存中运行,其中一些查询的结果可能是几 GB,因此 memcached 可能会很快填满机器的内存。但也许我并不完全理解 memcached 是如何运作的。
您的查询绝不能return数GB的数据。没有实际理由这样做,因为用户不能一次吸收那么多数据。您的结果集应该被分页,这样用户一次只能看到 10、25 个结果。这样一来,您还可以将查询限制为一次仅从基于页码的特定索引开始获取 10、25 条记录。
尽管如此,缓存搜索结果页面并不是一个特别好的主意。其一,不同用户 曾经 执行完全相同搜索的可能性非常小,您最终会浪费 RAM 来缓存永远不会再次使用的结果集。此外,日志之类的东西应该是实时的。如果您 return 一个缓存的结果集,可能会有未包含的新的相关结果,从而掩盖了搜索的实用性。
如上所述,缓存可以解决的问题有限。当您构建此应用程序时,我看不出您为什么不能只插入 Django Haystack 和 Whoosh 并查看它的性能,然后轻而易举地切换到其他一些企业级搜索后端。