PHP中压缩存档的性能问题

时间:2012-02-15 20:24:23

标签: php database zip

First Some Background

我正在计划新的PHP Web应用程序的架构,并尝试使其尽可能简单地安装。因此,我不关心最终用户运行的Web服务器,只要他们可以访问PHP(在PHP5中设置我的要求)。

但是应用需要某种数据库支持。我决定采用嵌入式解决方案,而不是使用MySQL。一些朋友推荐了SQLite - 我可能仍然朝这个方向发展 - 但是我很犹豫,因为它需要PHP中的其他模块才能工作。

请记住,目标很容易安装...大多数非专业用户不会知道他们的服务器有哪些PHP模块,甚至不知道如何找到他们的php.ini文件,更不用说启用其他工具了。

我目前的目标

所以我目前的倾向是使用基于文件系统的数据存储。 “数据库”将是一个文件夹,每个“表”将是一个特定的子文件夹,每个“行”将是该子文件夹中的文件。例如:

/public_html
    /application
        /database
            /table
                1.data
                2.data
            /table2
                1.data
                2.data

数据库中还有其他文件可用于定义架构要求,关系等。但这是我倾向于的基本结构。

我对Microsoft构建Open Office XML文件格式(.docx / .xlsx / etc)的方式非常满意。每个文件实际上都是一组定义文档的XML文件的ZIP存档。

它干净,易于解析,易于理解。

我想实际设置我的目录结构,以便/database实际上是驻留在服务器上的ZIP存档 - 一个可移植的文件。

但随着数据存储量的增长,这不会开始影响服务器的性能吗? PHP是否需要将整个存档读入内存以提取并读取其复合文件?

我可以使用哪些替代方法来实现这种文件结构,但仍然尽可能便携?

3 个答案:

答案 0 :(得分:2)

使用真实数据库也会影响您的表现。值得加载额外的模块(并且大多数PHP安装至少具有mysql模块,也可能是sqlite)因为这些模块是用C语言编写的,运行速度比PHP快得多,并且已针对速度进行了优化。如果您愿意处理sqlite BS,使用sqlite将有助于保持您的Web应用程序的可移植性。

答案 1 :(得分:2)

自PHP5起默认启用Sqlite,因此大多数PHP5用户都应该拥有它。

我认为zip方法存在大量问题,例如将文件添加到相对较大的zip存档非常耗时。我认为会出现可怕的并发和锁定问题。

读取zip文件无论如何都需要php扩展,除非你使用纯PHP解决方案。缺点是大多数php解决方案都希望将整个zip读入内存,并且还会比用C语言编写的内容慢,并且像PHP中的zip扩展一样编译。

我会选择另一种方法,或者要求SQLite / MySQL。如果您使用PDO for PHP,那么您可以允许用户选择SQLite或MySQL,并且您的代码与发出查询没有区别。我认为99%以上的webhost都支持MySQL。

答案 2 :(得分:0)

Zip档案非常适合数据交换。但是,它们不适合快速访问,并且它们对于重写内容非常糟糕。这两者对于Web应用程序使用的数据库都非常重要。

您提出的解决方案也存在一些特定的性能问题 - zip存档中的文件列表在内部存储为“平面”列表,因此按名称访问文件需要O(n)时间相对于存档。