какой из них потребляет меньше ресурсов? открыть текстовый файл или сделать запрос SQL, оба тысячи раз? - PullRequest
3 голосов
/ 17 февраля 2011

У меня есть php-сайт, на котором отображаются рецепты www.trymasak.my , если быть точным.Рецепты, отображаемые на странице индекса, обновляются примерно раз в день.Чтобы получить последние рецепты, я просто использую запрос mysql, который выглядит как «выберите recipe_name, page_views, image from table order by last_updated».Так что, если бы я получил 10000 посетителей в день, очевидно, что запрос будет выполняться 10000 раз в день.Друг сказал мне, что лучший способ (с точки зрения уменьшения нагрузки на сервер) - когда я обновляю рецепты, я просто вставляю последние детали рецепта (имена, изображения и т. Д.) В текстовый файл и делаю свою страницу вместо того, чтобы запрашивать одно и то же.запрос на 10000 раз, просто получить данные из текстового файла.Его предложение действительно лучше?Если да, то какую команду php лучше всего использовать для открытия, чтения и закрытия текстового файла?

спасибо

Ответы [ 6 ]

3 голосов
/ 17 февраля 2011

Benchmark

Чтобы узнать правду о чем-то, вы должны действительно сравнить его. «Simple is Hard» от Расмуса Ледорфа (автора PHP) - это действительно интересные видео / слайды (мое мнение;)), которые объясняют, как тестировать ваш сайт. Он научит вас заниматься низко висящими плодами вашего сайта, а не тратить время на преждевременные оптимизации.

Дональд Кнут сделал следующие два Заявления об оптимизации: «Мы должны забудьте о малой эффективности, скажем около 97% времени: преждевременно оптимизация - корень зла "

"В устоявшейся технике дисциплинирует улучшение на 12%, легко получается, никогда не считается маргинальным и я верю в ту же точку зрения должно преобладать в программном обеспечении инженерия " 5

В двух словах вы будете запускать тесты, используя такие инструменты, как Siege , ab, httperf и т. Д. Я бы очень хотел посоветовать вам посмотреть это видео, если вы не знакомы с этой темой, потому что я нашел это действительно интересные часы / читать.

Скорость

Если скорость, как ваша забота, вы должны хотя бы рассмотреть:

  1. Использование кэша байт-кода => APC . Прекомпиляция вашего PHP действительно ускорит ваш сайт по крайней мере по двум важным причинам:

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

    PHP ускорители могут существенно увеличить скорость PHP Приложения. Улучшения веб-страницы Пропускная способность генерации в 2 раза до 7 были замечены. 50 в разы быстрее для интенсивных вычислений программы анализа.

  2. Мы используем базу данных в памяти для хранения ваших запросов => Redis или Memcached . Существует очень большое несоответствие между памятью и диском (IO) .

    Таким образом, мы наблюдаем, что основная память примерно в 10 раз медленнее и единиц ввода / вывода В 1000 раз медленнее, чем процессор.

    Также интересно прочитать аналогию (не могу скопировать из книг Google:)).

3 голосов
/ 17 февраля 2011

Типичным решением является кеширование в памяти. Либо результат запроса, либо вся страница.

1 голос
/ 17 февраля 2011

Базы данных являются более гибкими, безопасными и масштабируемыми в долгосрочной перспективе.10000 запросов в день - это не так уж много для современных СУБД.Перейти (или остаться) в базу данных.

Оптимизировать с точки зрения кэширования, в спецификации HTTP есть собственный раздел:

0 голосов
/ 17 февраля 2011

Открытие ОДНОГО файла быстрее, чем выполнение запроса MySQL Connect +.НО, если вашему веб-сайту уже требуется подключение MySQL для получения какой-либо другой информации, вы, вероятно, захотите придерживаться своего запроса, поскольку самая длинная часть - это соединение, а ваш запрос очень легкий.

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

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

0 голосов
/ 17 февраля 2011

Если вы попробуете это, сохраните рецепты в структуре папок следующим образом:

/ recipes / X / Y / Z / id.txt, где X, Y и Z - случайное целое число, от 1 до25

пример: /recipes/3/12/22/12345.txt

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

Я думаю, что MySQL будет быстрее и, безусловно, более управляемым, поскольку в любом случае вам придется делать резервные копии базы данных MySQL.

0 голосов
/ 17 февраля 2011

Чтение файлов:

  • file_get_contents () , если хотите хранить содержимое в переменной перед выводом
  • readfile () , если вы просто хотите вывести файл содержание
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...