2013-05-30 4 views
1

Я не уверен, как подойти к этому так, чтобы веб-приложение работало эффективно. Меня беспокоит правильное внедрение этого, потому что я работаю с веб-сайтом с высоким трафиком.Глобальная дилемма - сохранение значений из db, которые редко меняются

У меня есть 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  | 
+----+-----------+-------+----------------------------+-------------------------+-------------+ 
+0

Какие варианты вы думаете? У вас есть код? – bestprogrammerintheworld

+0

Первоначально у меня только что был класс для каждой таблицы, который проверяет, были ли данные уже установлены/получены, но с более чем 5K пользователями, получающими доступ к этому несколько раз в минуту, все еще делает его тяжелым. – Kate

+0

Какой код выполняется, когда пользователи обращаются к вашему сайту? Трудно дать обратную связь без кода. (Как получить доступ к db) – 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.
Затем, для извлечения данных из '' ключом1

$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

0

Если есть простые критерии для доступа к данным (например, только первичным ключам), я хотел бы использовать кэширование в чем-то вроде Redis со сроком службы для хранения данных где ключ будет выглядеть как table_name:id.

+0

Я добавил примеры таблиц и их данных. – Kate

Смежные вопросы