在PHP中只有一次从数据库读取设置的优化方法

时间:2011-03-02 15:03:21

标签: php

我正在开发一个包含多个使用一个主sql数据库的http服务器的大项目。

项目有许多经常使用的设置(几乎每个请求)。 设置存储在主sql数据库中。

我想知道,如果有一些方法只能在php中初始化一次设置,因为每次请求从sql server一遍又一遍地读取相同的设置都没有意义,这感觉就像是浪费资源

提前致谢

6 个答案:

答案 0 :(得分:3)

2个解决方案:

  1. 创建一个(也可能是PHP)脚本,将数据库中的设置导出为纯文本文件,并在每个http服务器上包含该文件;

  2. 使用像http://memcached.org/这样的内存缓存服务器,并从外部脚本预加载数据,然后让http服务器连接到memcache而不是SQL。

  3. 编辑:除此之外,PHP不会为您提供真正的Web应用程序,您可以“运行”您的应用程序,它有自己的内存和持久的全局变量。这是我个人厌倦了PHP并转向Python(特别是Django)的原因之一。

答案 1 :(得分:0)

在PHP代码中对这些设置进行硬编码。

// Your current code, somthing like this:
$setting_1 = getDataFromMySQL('setting1');

// Hard coded
$setting_1 = TRUE;

答案 2 :(得分:0)

如果以这种方式编译,你可以在php中使用shared memory

另一种可能性是您将设置的组合值作为PHP代码存储在一个字段(例如PHP数组)中,然后只需向DB服务器发送一个查询即可读取所有这些值。当然,当设置更改时,必须更新此缓存值。

答案 3 :(得分:0)

如果你使用的是单个服务器,APC是最好的解决方案,否则我会选择memcached。但是,您也可以考虑使用MYSQL内存表,它对于快速读写非常有效。另一个解决方案是使用Linux来保存和调用Linux exec的设置。但是,这可能是一个麻烦,可能存在一些安全问题。另外,请允许我提醒您,有效的INNODB索引可以为您提供很多帮助。 MYISAM也被认为是一个很好的“阅读”表演者,但我的基准测试表明,INNODB指数更快。

答案 4 :(得分:-1)

您可以将设置存储在用户的会话中 -

session_start();
if (!isset($_SESSION['settings'])) {
  $settings_array = //pulled from database
  $_SESSION['settings'] = $settings_array;
}

这样,每个用户只会查询一次

答案 5 :(得分:-1)

您可以使用会话来存储这些设置。