【问题标题】:Difference in performance among config files for PHPPHP 配置文件之间的性能差异
【发布时间】:2011-12-02 01:03:34
【问题描述】:

我正在构建一个站点,其配置数据由 php file 保存,变量不超过 15 行。

到目前为止,一切都运行良好,但现在我面临定义更多变量的需求,并进行了一些研究,我发现了一个 article about Application Configuration in PHP,其结论表明 php files 是分析它们如何扩展时最糟糕的选择(Databases 是更好的选择)。

在决定使用哪种格式的配置文件时,最推荐的选择是什么?

【问题讨论】:

  • “缩放”在哪个方向?文件中有更多条目?需要配置的服务器更多?
  • “缩放”,文件中有更多条目。

标签: php performance configuration


【解决方案1】:

对不起,什么?!

在分析它们的扩展方式时,php 文件是最糟糕的选择(数据库是更好的选择)。

这很奇怪,因为您可以很好地扩展 php - 只需设置另一台服务器就可以了,您已经将 php 扩展了两次。

还要记住,有一些操作码优化器会将解析后的文件内容保存在内存中。

而扩展数据库一门火箭科学。扩展数据库是一个棘手的过程,涉及良好的数据库内部结构和您的操作系统知识。

所以我永远不会参考那篇文章。

PS:看了文章:

当脚本运行时,结果就出来了。平均大约 0.052640 标记,这是迄今为止最慢的方法。

我无法意识到仅仅实例化变量会比从数据库读取(包括连接开销、从表读取开销、传输数据开销以及最终相同实例化变量过程)慢。根据定义,X 不能超过 X + Y

【讨论】:

  • 是的,我真的和你想的一样。这就是我一开始选择 php 文件来保存配置变量的原因。无论如何,当文章讨论每个方法scale 的方式时,它们的意思是增加变量数量时的行为方式,而不是设置更多应用程序实例时的行为方式。你是这个意思吗?
  • 我能想到的唯一原因会使 PHP 数组成为最慢的方法是解析大型 PHP 文件和数组。为了解决这个问题,使用操作码缓存器,这样它就不需要每次都解析配置,或者解析配置,序列化它并尽可能使用序列化版本。
【解决方案2】:

在我看来,如果可以将配置存储在数据库中,并将结果缓存在内存中,性能应该是非常非常好的。

但是,如果配置存储在数据库中,并且需要大量的连接才能获得它,没有缓存,性能可能比使用 PHP 文件最差。

另一方面,如果您将配置存储在一个返回数组的 PHP 文件中:

//config.php
return array(
   'configitem1' => 'xyz',
)

//then use
$config = require_once('config.php);

性能应该不会太差。显然,每个请求都会有磁盘 IO,因此如果您需要大量文件,您可能会在那里看到一些性能问题。如果需要加载文件,您始终可以将结果缓存到 memcached 或 APC 中,以消除磁盘 IO 性能问题。

最后,您可以使用 XML 或 YAML 文件。这些将是性能最低的,因为您需要加载和读取文件,然后对其进行解析。

就个人而言,我的意见是将配置存储在数据库中,应用程序的用户可能需要对其进行修改。例如:

  • 页面的自定义 URL。
  • 应用程序设置,例如用户是否可以创建新帐户
  • 应用程序是否处于维护模式等标志。

总会有你需要存储在文件中的配置:

  • 数据库连接参数
  • 缓存设置(即 memcached 设置)。

但是,存储在文件中的配置可以缓存在 memcached 或 APC 中,因此您的应用程序应该仍然可以运行。

所以我的 2 美分:

  • 如果用户需要能够修改配置,请使用数据库存储配置。
  • 将其他配置作为数组存储在 PHP 文件中并使用缓存。
  • 使用 YAML 和 XML 作为最后的手段。

【讨论】:

    【解决方案3】:

    这就是文章错误的原因:

    Type    First Run   Second Run
    Ini File    0.000421    0.021381
    XML File    0.000717    0.012310
    PHP File    0.000450    0.052640
    Database    0.005533    0.014184
    

    说“第一次运行”和“第二次运行”清楚地表明这些不是平均结果。作者只运行了两次,没有实际的分析器,并发布了一个无意义的数字作为结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 2011-02-22
      • 2017-01-09
      • 2015-09-04
      • 1970-01-01
      • 2010-11-21
      • 2012-05-26
      相关资源
      最近更新 更多