2013-05-30 58 views
1

我不知道如何以一種可以使web應用程序有效運行的方式來實現。我擔心正確執行此操作,因爲我正在與高流量網站合作。全球困境 - 從db中存儲很少變化的值

我有一個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

你在想什麼?你有任何代碼嗎? – bestprogrammerintheworld

+0

本來我只是每個表都有一個類來檢查數據是否已經被設置/檢索,但是超過5K的用戶每分鐘訪問幾次數據仍然會讓它變得沉重。 – Kate

+0

用戶訪問您的網站時執行什麼樣的代碼?如果沒有代碼,很難給出反饋(數據庫如何訪問) – bestprogrammerintheworld

回答

2

一直訪問數據庫可能會非常昂貴。

最近的PHP發行版隨附APC。 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。
然後,在陣列$arr檢索來自 'KEY1'

$arr = explode(':', apc_fetch("key1")); 

數據。
在此示例中,來自DB的密鑰是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

0

如果有簡單的標準來訪問數據(例如,僅主鍵),我使用緩存中類似的Redis用壽命爲存儲數據鑰匙就像table_name:id

+0

我已經添加了表格及其數據的示例。 – Kate