Php 全局困境-存储数据库中很少更改的值
我不知道如何才能使web应用程序高效运行。我担心如何正确地实现这一点,因为我正在与一个高流量网站合作 我在一个Php 全局困境-存储数据库中很少更改的值,php,database-design,Php,Database Design,我不知道如何才能使web应用程序高效运行。我担心如何正确地实现这一点,因为我正在与一个高流量网站合作 我在一个MySQLDB中有3个表,这些表中的值很少改变,但是被引用了很多。在PHP中存储和访问这些数据的最佳方式是什么 表格示例: GENRES +----+-----------+-----------+---------------+--------------+---------------------+ | id | is_active | name | content_
MySQL
DB中有3个表,这些表中的值很少改变,但是被引用了很多。在PHP
中存储和访问这些数据的最佳方式是什么
表格示例:
GENRES
+----+-----------+-----------+---------------+--------------+---------------------+
| id | is_active | name | content_limit | thumbnail | thumbnail_active |
+----+-----------+-----------+---------------+--------------+---------------------+
| 1 | ☺ | Animals | 65 | Animals.png | Animals_Active.png |
| 2 | ☺ | Art | 30 | Art.png | Art_Active.png |
| 3 | | Biography | 0 | NULL | NULL |
| 4 | ☺ | Children | 50 | Children.png | Children_Active.png |
| 6 | ☺ | Fantasy | 15 | Fantasy.png | Fantasy_Active.png |
| 7 | | Fiction | 0 | NULL | NULL |
| 8 | | Health | 0 | NULL | NULL |
| 10 | | Music | 0 | Music.png | Music_Active.png |
| 11 | | Politics | 0 | NULL | NULL |
+----+-----------+-----------+---------------+--------------+---------------------+
如果有简单的标准来访问数据(例如,只有主键),我会在像Redis这样的具有生命周期的东西中使用缓存来存储数据,其中键类似于
table_name:id
,始终访问数据库可能非常昂贵
最近的PHP发行版附带了已安装的。APC非常高效。APC将使用键索引的数据存储在共享内存中(因此可从所有分叉的PHP进程访问)
您必须告诉APC(在APC.ini
的选项中)您要保留多少MB或GB
然后您可以非常快速地存储和检索值
例如,您可以为
1 | ☺ | Animals | 65 | Animals.png | Animals_Active.png
作为
像
或者创建一个初始化PHP,从数据库中加载一次所有行并将它们存储在APC中。然后,从“key1”检索数据
$arr = explode(':', apc_fetch("key1"));
在数组中$arr
在本例中,数据库中的键为
1
。因此,您可以将APC密钥命名为key1
…检索一组数据(例如从0到9的键) 以及该行中的一个元素
$alldata[ $somekey ][ 2 ]
你会给动物提供什么选择?你有任何代码吗?最初我只是为每个表创建了一个类,用于检查数据是否已经设置/检索,但是每分钟有超过5K的用户访问此表几次,这仍然会让它变得沉重。当用户访问你的站点时,会执行什么样的代码?没有代码就很难给出反馈。(数据库是如何访问的)没有验证用户的特殊代码,因为不管查看网页的人/用户是否登录,都需要访问这些数据。比如说,当一个人访问主页时,我需要利用两个表中的数据,但我不希望每次需要这些数据时都要查询这些表,因为这些数据很少发生变化。好的-您使用的是persistant db connection吗?我添加了表及其数据的示例。
apc_store("key1", '1:1:Animals:65:Animals.png:Animals_Active.png');
$arr = explode(':', apc_fetch("key1"));
$alldata = array();
for ($key=0 ; $key<9 ; $key++) {
$arr = explode(':', apc_fetch("key$key"));
// process that row if necessary
$alldata[] = $arr;
}
$alldata[ $somekey ]
$alldata[ $somekey ][ 2 ]