Храня данные, к которым часто получают доступ, в файле, а не MySQL

Я работаю над системой управления контентом PHP и, в тестировании, заметил, что довольно многие таблицы MySQL системы запрашиваются почти на каждой странице, но очень редко пишутся в. То, что я задаюсь вопросом, является желанием этот запуск, чтобы лечь тяжелым бременем на базу данных, когда трафик сайта увеличивается, и как я могу решить/предотвратить это?

Мои начальные мысли состояли в том, чтобы начать хранить некоторые более статические данные в файлах (использующий сериализацию PHP), но это на самом деле уменьшает загрузку сервера? То, по поводу чего я волнуюсь, - то, что я просто передал бы высокую загрузку от базы данных до файловой системы!

Если бы кто-то мог подсказка меня в на лучшем подходе, который был бы большим. В случае, если объем самих данных имеет большой эффект, я детализировал некоторые данные, которые я буду хранить ниже:

  • Полный список Стран (включая коды страны ISO)
  • Опции сайта (кожа, администраторская электронная почта, URL поддержки и т.д.)
  • Группы пользователей (включая полномочия)
6
задан OMG Ponies 20 June 2010 в 20:16
поделиться

9 ответов

Вы должны помнить, что чтение таблицы из базы данных на мощном сервере и при быстром соединении, вероятно, будет быстрее, чем чтение это с диска на вашем локальном компьютере. База данных будет кэшировать все эти небольшие, регулярно используемые таблицы в памяти.

Реализуя ту же функциональность в файловой системе самостоятельно, можно получить лишь небольшое ускорение, но есть большой шанс испортить ее и замедлить.

Вероятно, лучше всего использовать базу данных.

13
ответ дан 8 December 2019 в 04:52
поделиться
  1. Оптимизируйте ваши запросы (используя журнал медленных запросов mysql) и функцию EXPLAIN.

  2. Если таблицы действительно редко записываются, вы можете использовать собственное кэширование MySQL. Вам нечего менять в коде, просто включите кеширование mysql в my.conf.

  3. Попробуйте использовать шаблонизатор, например Smarty (smarty.net). У него есть собственная система кеширования, которая работает очень хорошо и ДЕЙСТВИТЕЛЬНО снижает нагрузку на сервер.

  4. Вы также можете использовать Memcache, но его действительно стоит использовать только с действительно высоконагруженными веб-сайтами. (Я думаю, что Smarty будет достаточно.)

5
ответ дан 8 December 2019 в 04:52
поделиться

Если ваша база данных правильно проиндексирована, то запросы к данным из базы будут выполняться гораздо быстрее. Если вы хотите ускорить этот процесс, обратите внимание на memcached или аналогичные.

1
ответ дан 8 December 2019 в 04:52
поделиться

Зарабатывать на проектах с открытым исходным кодом непросто, но это возможно. Создатель Клоюре Рич Хики сделал замечательный пост , освещающий способы сделать это. Удачи.

-121--3504604-

Обернуть его в класс или функтор, соответствующий вашим потребностям?

-121--1681403-

Базы данных именно для этой цели.. Хранение и предоставление данных. Файловая система предназначена для сценариев и программирования.

При возникновении проблем с загрузкой рекомендуется использовать Memcached или другую утилиту для базы данных.

Можно также рассмотреть возможность кэширования различных частей страницы непосредственно в базе данных в виде целых разделов (например, боковая панель, которая не слишком сильно изменяется, сгенерированная секция заголовка,..)

1
ответ дан 8 December 2019 в 04:52
поделиться

Базы данных гораздо лучше справляются с большими объемами данных, чем родная файловая система.

Не беспокойтесь об оптимизации вашего сайта для снижения нагрузки на сервер, пока у вас действительно нет проблем с нагрузкой на сервер. :-)

.
2
ответ дан 8 December 2019 в 04:52
поделиться

вы можете кэшировать вывод (flush (), ob_flush () и т. Д.) В файл и включать , которые вместо нескольких чтений MySQL. кэширование определенно быстрее, чем многократный доступ к MySQL.

чтение статического файла происходит намного быстрее, чем добавление накладных расходов через обработку php и mysql.

0
ответ дан 8 December 2019 в 04:52
поделиться

Вам нужно оценить производительность с помощью нагрузочного тестирования, чтобы избежать преждевременной оптимизации.

Было бы глупо и, вполне возможно, увеличило бы общую нагрузку хранение данных в файлах с сериализацией, базы данных действительно хороши для извлечения данных.

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

Важнее иметь хорошо спроектированную систему, которая позволяет вносить изменения по мере возникновения потребностей.

0
ответ дан 8 December 2019 в 04:52
поделиться

Таблицы, которые вы упомянули (страны и пользователи), обычно кэшируются в памяти MySQL напрямую, если только вы не ожидаете несколько миллионов записей в этих таблицах.

В случае, когда эти таблицы не помещаются в памяти, вы можете рассмотреть систему распределенного кэширования памяти общего назначения, такую как memcached.

2
ответ дан 8 December 2019 в 04:52
поделиться

Вот ссылка на пару скриптов, которые по сути делают то, о чем говорит dusoft, и кэшируют буфер вывода в файл:

http://www. addedbytes.com/articles/caching-output-in-php/

При таком использовании это больше похоже на решение "болт-на-после-факта", но это же поведение, безусловно, может быть реализовано более интегрированным способом, если рассмотреть его на более ранней стадии процесса. Многие фреймворки также имеют встроенные функции такого рода.

0
ответ дан 8 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: