我正在寻找一个Perl库来处理数据库查询的缓存,但它需要处理比典型应用程序更大的缓存。它需要:用于大型数据集的Perl缓存库?
缓存20万左右的记录一次,平均也许是两MB左右各(大约400GB左右,总缓存大小)
没有最大记录大小(或者至少相当大的一个,像几个GB)
是大小感知,所以当总储存得到上述预设的最大
以最快的速度自动删除的最后访问时间)记录的最古老的(在条件作为pos考虑到上述要求
我到目前为止看过的库是CHI和Cache :: SizeAwareFileCache(Cache :: Cache的扩展)。
主要担心我有CHI是,我需要使用CHI ::驱动程序::文件与is_size_aware打开,但文档明确警告不要这样:
...的驱动程序不能自动读取和更新值 - 例如,CHI :: Driver :: File - 更新大小时存在争用条件,可能导致大小随时间推移而变得不准确。
我对Cache :: SizeAwareFileCache所关心的主要问题是Cache :: Cache是旧的并且当前没有维护。我在文档中看到的第一件事就是建议我使用CHI来代替。
有什么建议吗?我应该使用这两个库中的任何一个,还是其他的?我是否因为想要使用缓存而疯狂?有没有人有类似要求的经验?我会很感激任何建议。
有关应用程序的一些细节:
我有一个分析大型网站的应用程序,以寻找在HTML代码中难以发现的错误/低效,往往埋成千上万的网页中。应用程序会抓取整个网站并将每个页面的HTML代码存储在数据库中。 (在独立机器上运行的MySQL服务器)爬网完成后,用户可以运行各种软件工具来分析网站上每个页面的HTML。
工具在队列中等待,并一次运行一个。每个工具都需要加载抓取中每个页面的HTML,并始终以相同的顺序。因此,如果抓取抓取100,000页,并且用户需要运行15个不同的工具,则缓存需要保存至少100,000条记录,每个记录将被读取15次。缓存能够同时存储来自给定站点的所有页面是至关重要的。 (否则每一页就会被放弃,然后再重新缓存的每个工具,这将是比没有缓存还要糟糕)
最大的目标是减少数据库的负载。次要(但仍然非常重要)的目标是提高速度。
如果我从头开始,这是一个很好的建议,但我真的需要一些我可以快速实施以改进现有应用程序的东西。 – plasticinsect