我不确定如何以一种有效运行Web应用程序的方式来解决这个问题。我担心正确实施这个,因为我正在与流量很大的网站合作。
我在MySQL
数据库中有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 |
+----+-----------+-----------+---------------+--------------+---------------------+
SERVERS
+----+-----------+-------+----------------------------+-------------------------+-------------+
| id | is_active | name | url | webserver_document_root | description |
+----+-----------+-------+----------------------------+-------------------------+-------------+
| 1 | ☺ | name1 | http://server1.website.com | /dir1 | NULL |
| 2 | ☺ | name2 | http://server1.website.com | /dir2 | NULL |
+----+-----------+-------+----------------------------+-------------------------+-------------+
答案 0 :(得分:2)
始终访问数据库非常昂贵。
最近安装了APC的PHP发行版。 APC效率很高。 APC将使用密钥索引的数据存储在共享内存中(因此可从所有分叉的PHP进程访问)。
您必须告诉APC(在apc.ini
的选项中)您要保留多少MB或GB。
然后您可以非常快速地存储和检索值。
E.g。你可以存储
的值1 | ☺ | Animals | 65 | Animals.png | Animals_Active.png
作为
'1:1:Animals:65:Animals.png:Animals_Active.png'
像
apc_store("key1", '1:1:Animals:65:Animals.png:Animals_Active.png');
或初始化PHP以从数据库所有行加载一次并将它们存储在APC中。
然后,从'key1'
$arr = explode(':', apc_fetch("key1"));
数组$arr
中的
在此示例中,数据库中的密钥为1
。因此,您可以将APC键命名为key1
...
检索一堆数据(例如,从0到9的键)
$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 ]
会给Animals
答案 1 :(得分:0)
如果有简单的条件来访问数据(例如只有主键),我会使用Redis这样的生命周期缓存来存储数据,其中key就像table_name:id
。