1

我不确定如何以使 Web 应用程序有效运行的方式来解决这个问题。我担心正确实施这一点,因为我正在使用一个高流量的网站。

我在数据库中有 3 个表,MySQL这些表中的值很少更改,但被引用了很多。存储和访问该数据的最佳方式是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       |
+----+-----------+-------+----------------------------+-------------------------+-------------+
4

2 回答 2

2

一直访问数据库可能非常昂贵。

最近的 PHP 发行版都安装了APC。APC 非常高效。APC 将使用键索引的数据存储在共享内存中(因此可以从所有分叉的 PHP 进程中访问)。

您必须告诉 APC(在 选项中apc.ini)您要保留多少 MB 或 GB。

然后您可以非常快速地存储和检索值。

例如,您可以存储值

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

于 2013-05-30T16:16:52.487 回答
0

如果有访问数据的简单标准(例如,只有主键),我会在 Redis 之类的具有生命周期的东西中使用缓存来将数据存储在 key 的位置table_name:id

于 2013-05-30T14:09:51.910 回答