Я работаю над системой управления контентом PHP и, в тестировании, заметил, что довольно многие таблицы MySQL системы запрашиваются почти на каждой странице, но очень редко пишутся в. То, что я задаюсь вопросом, является желанием этот запуск, чтобы лечь тяжелым бременем на базу данных, когда трафик сайта увеличивается, и как я могу решить/предотвратить это?
Мои начальные мысли состояли в том, чтобы начать хранить некоторые более статические данные в файлах (использующий сериализацию PHP), но это на самом деле уменьшает загрузку сервера? То, по поводу чего я волнуюсь, - то, что я просто передал бы высокую загрузку от базы данных до файловой системы!
Если бы кто-то мог подсказка меня в на лучшем подходе, который был бы большим. В случае, если объем самих данных имеет большой эффект, я детализировал некоторые данные, которые я буду хранить ниже:
Вы должны помнить, что чтение таблицы из базы данных на мощном сервере и при быстром соединении, вероятно, будет быстрее, чем чтение это с диска на вашем локальном компьютере. База данных будет кэшировать все эти небольшие, регулярно используемые таблицы в памяти.
Реализуя ту же функциональность в файловой системе самостоятельно, можно получить лишь небольшое ускорение, но есть большой шанс испортить ее и замедлить.
Вероятно, лучше всего использовать базу данных.
Оптимизируйте ваши запросы (используя журнал медленных запросов mysql) и функцию EXPLAIN.
Если таблицы действительно редко записываются, вы можете использовать собственное кэширование MySQL. Вам нечего менять в коде, просто включите кеширование mysql в my.conf.
Попробуйте использовать шаблонизатор, например Smarty (smarty.net). У него есть собственная система кеширования, которая работает очень хорошо и ДЕЙСТВИТЕЛЬНО снижает нагрузку на сервер.
Вы также можете использовать Memcache, но его действительно стоит использовать только с действительно высоконагруженными веб-сайтами. (Я думаю, что Smarty будет достаточно.)
Если ваша база данных правильно проиндексирована, то запросы к данным из базы будут выполняться гораздо быстрее. Если вы хотите ускорить этот процесс, обратите внимание на memcached или аналогичные.
Зарабатывать на проектах с открытым исходным кодом непросто, но это возможно. Создатель Клоюре Рич Хики сделал замечательный пост , освещающий способы сделать это. Удачи.
-121--3504604-Обернуть его в класс или функтор, соответствующий вашим потребностям?
-121--1681403-Базы данных именно для этой цели.. Хранение и предоставление данных. Файловая система предназначена для сценариев и программирования.
При возникновении проблем с загрузкой рекомендуется использовать Memcached или другую утилиту для базы данных.
Можно также рассмотреть возможность кэширования различных частей страницы непосредственно в базе данных в виде целых разделов (например, боковая панель, которая не слишком сильно изменяется, сгенерированная секция заголовка,..)
Базы данных гораздо лучше справляются с большими объемами данных, чем родная файловая система.
Не беспокойтесь об оптимизации вашего сайта для снижения нагрузки на сервер, пока у вас действительно нет проблем с нагрузкой на сервер. :-)
. вы можете кэшировать вывод (flush (), ob_flush () и т. Д.) В файл и включать
, которые вместо нескольких чтений MySQL. кэширование определенно быстрее, чем многократный доступ к MySQL.
чтение статического файла происходит намного быстрее, чем добавление накладных расходов через обработку php и mysql.
Вам нужно оценить производительность с помощью нагрузочного тестирования, чтобы избежать преждевременной оптимизации.
Было бы глупо и, вполне возможно, увеличило бы общую нагрузку хранение данных в файлах с сериализацией, базы данных действительно хороши для извлечения данных.
Если после анализа есть реальное снижение производительности (в чем я сомневаюсь, если только вы не говорите о массивной нагрузке), то кэширование - лучшее решение.
Важнее иметь хорошо спроектированную систему, которая позволяет вносить изменения по мере возникновения потребностей.
Таблицы, которые вы упомянули (страны и пользователи), обычно кэшируются в памяти MySQL напрямую, если только вы не ожидаете несколько миллионов записей в этих таблицах.
В случае, когда эти таблицы не помещаются в памяти, вы можете рассмотреть систему распределенного кэширования памяти общего назначения, такую как memcached.
Вот ссылка на пару скриптов, которые по сути делают то, о чем говорит dusoft, и кэшируют буфер вывода в файл:
http://www. addedbytes.com/articles/caching-output-in-php/
При таком использовании это больше похоже на решение "болт-на-после-факта", но это же поведение, безусловно, может быть реализовано более интегрированным способом, если рассмотреть его на более ранней стадии процесса. Многие фреймворки также имеют встроенные функции такого рода.