Кэширование конфигурации сайта (Рейтинг: +14)
Статью писал для своего сайта, но по некоторым причинам решил все свои статьи перезалить сюда (что бы не утерять)!
Чаще всего нам приходится хранить настройки в базе данных в таком виде:
Далее мы заносим эти значения в скрипте в массив!
Самый обоснованный вариант, это выглядет так:
Результат: 0.0095, 0.0144, 0.0219
В принципе так подумать, что же это за конфиги, в которых хранится 10,000 записей? но необходимо учитывать то, что у вас сидит на сайте ~1000 человек, каждый из них кликает по ссылкам периодичностью в 3 секунды.
каждый раз при генерации страницы для пользователя идет запрос в базу...
а это уже сказывается на сервере...
Я предлагаю кэшировать конфиги следующим образом:
Т.е мы проверяем когда было произведено последнее кэширование, и если это было 12 часов назад, то мы делаем запрос к бд, и записываем полученный массив в файл, или если время не истекло, то открываем файл, и заносим в переменную полученный массив.
В итоге выигрыш: 0.0019, 0.0023, 0.0037
Добавил: Nu3oN
16.11.2011 / 20:21Чаще всего нам приходится хранить настройки в базе данных в таком виде:
+-------------------------+ | ключ | значение | |-------------------------| | home | http://7je.ru | +-------------------------+В итоге у нас выходит как минимум 30 значений!
Далее мы заносим эти значения в скрипте в массив!
Самый обоснованный вариант, это выглядет так:
<?php $qury = mysql_query("SELECT `key`, `value` FROM `setting`;"); while ($row = mysql_fetch_array($qury, MYSQL_ASSOC)) { $_set[$row['key']] = $row['value']; } ?>проверим это на оперативность при 10,000 записей!
Результат: 0.0095, 0.0144, 0.0219
В принципе так подумать, что же это за конфиги, в которых хранится 10,000 записей? но необходимо учитывать то, что у вас сидит на сайте ~1000 человек, каждый из них кликает по ссылкам периодичностью в 3 секунды.
каждый раз при генерации страницы для пользователя идет запрос в базу...
а это уже сказывается на сервере...
Я предлагаю кэшировать конфиги следующим образом:
<?php $file = 'setting.cache.db'; $life = is_file($file) ? filemtime($file) + 43200 : 0; if ($life < time()) { $qury = mysql_query("SELECT `key`, `value` FROM `setting`;"); while ($row = mysql_fetch_array($qury, MYSQL_ASSOC)) { $_set[$row['key']] = $row['value']; } file_put_contents($file, serialize($_set), LOCK_EX); } else { $_set = unserialize(file_get_contents('setting.cache.db')); } ?>
Т.е мы проверяем когда было произведено последнее кэширование, и если это было 12 часов назад, то мы делаем запрос к бд, и записываем полученный массив в файл, или если время не истекло, то открываем файл, и заносим в переменную полученный массив.
В итоге выигрыш: 0.0019, 0.0023, 0.0037
Рейтинг:
+14
Просмотры: 1752Комментарии (11) »