用于动态创建文件的缓存系统?

时间:2009-10-19 10:42:58

标签: python

我有一个Web服务器,它以多种格式(pdf和doc文件)动态创建各种报告。这些文件需要生成相当数量的CPU,并且在两个人使用相同输入创建相同报告的情况下,这种情况相当普遍。

输入:

  • 原始数据输入为字符串(方程式,数字和 单词列表),任意长度,几乎99%将小于约200字
  • 报告创建工具的版本

当用户尝试生成报告时,我想检查一个文件是否已经存在给定输入,如果是,则返回该文件的链接。如果该文件尚不存在,那么我想根据需要生成它。

  1. 那里有什么解决方案?我以前缓存过简单的http请求,但密钥非常简单(通常是数据库ID)

  2. 如果我必须自己做,最好的方法是什么。输入可以是几百个单词,我想知道如何将字符串转换为发送到缓存的密钥。

    //整个输入,使用太多内存,一对一映射 缓存['一二三四有五六七八九十一......'] //短按键 cache ['one two'] => 5结果,那么我必须将这些缩小甚至更多

  3. 这是应该在数据库中完成的,还是在Web应用程序代码中更好(在我的情况下是python)

  4. 谢谢大家。

2 个答案:

答案 0 :(得分:2)

这就是Apache的用途。

创建一个包含报告的目录。

配置Apache以提供该目录中的文件。

如果报告存在,请重定向到Apache将提供的URL。

否则,报告不存在,因此请创建它。然后重定向到Apache将提供的URL。


没有“散列”。你有一把钥匙(“一个字符串(方程式,数字和单词列表),任意长度,几乎99%将少于约200字”)和一个值,这是一个文件。不要在哈希上浪费时间。你只需要一把长钥匙。

你可以通过制作一个“slug”来压缩这个键:删除标点符号,用_替换空格,等等。

您应该创建一个内部代理键,它是一个简单的整数。

您只是将长密钥转换为“报告”,该报告既可以作为文件存在,也可以创建为文件。

答案 1 :(得分:1)

通常使用反向代理,例如SquidVarnish