Zend_Cache_Backend_Sqlite vs Zend_Cache_Backend_File

时间:2010-06-08 08:15:45

标签: file zend-framework sqlite caching

目前我正在使用Zend_Cache_Backend_File来缓存我的项目(特别是来自外部Web服务的响应)。如果我能在将结构迁移到Zend_Cache_Backend_Sqlite时找到一些好处,那我就会徘徊。

可能的优点是:

  • 文件系统排序良好(缓存文件夹中只有1个文件)
  • 删除过期的条目应该更快(我的假设,因为zend不需要扫描内部元数据以查找每个缓存的过期日期)

可能的缺点:

  • 在速度方面找到要读取的记录(使用文件zend检查文件是否存在,基于文件名,应该更快一点)。

我试图在互联网上搜索一下,但似乎没有很多关于此事的讨论。

你怎么看?

提前致谢。

2 个答案:

答案 0 :(得分:3)

我会说,这取决于你的申请。

切换不应该很难。只测试两种情况,看看哪种情况最适合你。除了你自己以外,没有基准是客观的。

仅测量性能,Zend_Cache_Backend_Static是最快的。

答案 1 :(得分:3)

Zend_Cache_Backend_File的另一个缺点是,如果你有很多缓存文件,它可能需要你的操作系统很长时间才能加载一个缓存文件,因为它每次都必须打开并扫描整个缓存目录。因此,假设您有10,000个缓存文件,请尝试在缓存目录上执行ls shell命令,以查看读取所有文件并打印列表所需的时间。每次需要访问缓存时,相同的延迟都会转换为您的应用程序。

您可以使用 hashed_directory_level 选项稍微缓解此问题,但它最多只能嵌入两个目录,如果您有大量缓存文件,这可能还不够。我在一个项目上遇到了这个问题,随着缓存变得越来越大,性能实际上会随着时间的推移而降低。我们无法切换到Zend_Cache_Backend_Memcached,因为我们需要标记功能(Memcached不支持)。切换到Zend_Cache_Backend_Sqlite是解决此性能下降问题的一个很好的选择。