Intereting Posts

Что быстрее; включая другой файл или запрос базы данных MySQL в PHP?

В PHP, который быстрее; используя include('somefile.php') или запрашивая базу данных MySQL с помощью простого запроса SELECT для получения той же информации?

Например, скажем, что у вас есть поле поиска автозаполнения JavaScript, которое должно было соответствовать 3000 условиям для сопоставления. Быстрее ли читать эти термины из другого файла, используя include или читать их из базы данных MySQL, используя простой запрос SELECT ?

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

Solutions Collecting From Web of "Что быстрее; включая другой файл или запрос базы данных MySQL в PHP?"

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

Buuuuut, потому что это зависит от вашей системы, это может быть неверно. Я предлагаю вам создать тестовый скрипт PHP и запустить его 100 раз из командной строки и повторить тест через HTTP (используя cURL)

Пример:

use_include.php

 <?php start = microtime(true); include( 'somefile.php' ); echo microtime(true)-start; ?> 

use_myphp.php

 <?php start = microtime(true); __put_here_your_mysql_statements_to_retrieve_the_file__ echo microtime(true)-start; ?> 

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

Однако на практике разница, вероятно, не имеет значения. Если список динамический, то его сохранение в MySQL упростит вашу жизнь. Статические списки (например, страны или штаты) могут быть сохранены в PHP include. Если список довольно короткий (несколько сотен записей) и часто используется, вы можете загрузить его прямо в JavaScript и покончить с AJAX.

Если вы идете по маршруту MySQL и беспокоитесь о скорости, используйте кеширование.

 $query = $_GET['query']; $key = 'query' . $query; if (!$results = apc_fetch($key)) { $statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query"); $statement->bindValue(':query', "$query%"); $statement->execute(); $results = $statement->fetchAll(); apc_store($key, $results); } echo json_encode($results); 

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

Вместо этого я хотел бы спросить себя, какая разница в обслуживании. Возможно, вы когда-нибудь измените данные? Если нет, просто поместите его в простой файл. Возможно, вы так часто меняете биты контента? Если это так, проще управлять базой данных. То же самое для структуры данных, если это требует «реструктуризации», возможно, более эффективно помещать его в базу данных?

Итак: делайте то, что, по вашему мнению, наиболее удобно для вас и будущего сопровождающего кода и данных. 🙂

Очень сложно / невозможно дать точный ответ, так как слишком много неизвестных переменных – что, если файловая система монтируется на NFS, которая находится на другой стороне мира? Или у вас есть вся база данных MySQL в памяти. Размер базы данных также должен учитываться.

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

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

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

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

Чтение необработанных данных сценарию из файла обычно будет быстрее, чем из базы данных.

Однако похоже, что вы хотите запросить эти данные, чтобы найти совпадение для возврата в javascript. В этом случае вы можете найти, что MySQL будет быстрее для фактического запроса / поиска данных (особенно если правильно проиндексирован и т. Д.), Поскольку это то, что хорошо подходит базе данных.

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

Почему бы не сделать это в обоих направлениях и не увидеть, что быстрее? Оба решения довольно тривиальны.

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

У меня недавно был этот вопрос. У меня были некоторые данные в mysql, которые я запрашивал при каждом запросе страницы. Для моего набора данных было быстрее написать файл с фиксированной длиной записи, чем использовать MySQL.

Было несколько разных факторов, которые сделали файл быстрее, чем MySQL для меня:

  1. Размер файла был небольшим – менее 100 килобайт текстовых данных
  2. Я случайно выбирал и не искал – индексы не имели никакого значения
  3. Время соединения – открытие файла и чтение его было быстрее, чем подключение к базе данных, когда загрузка сервера была высокой. Это было особенно актуально, поскольку ОС кэшировала файл в памяти

Суть в том, что я сравнил результаты и сравнил результаты. Для моей рабочей нагрузки файловая система была быстрее. Я подозреваю, что когда мои данные будут расти, это изменится. Я буду следить за работой, и я готов изменить, как это работает в будущем.

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

Похоже, вы планируете хранить статические данные в скрипте PHP, который вы включаете, чтобы избежать попадания в базу данных. Вы в основном делаете рудиментарный кеш. Это может работать нормально, если у вас есть способ обновить этот файл, если / когда данные будут изменены. Вы также можете захотеть узнать о MySQL Query Cache, чтобы быстрее выполнять SQL-запросы против статических данных. Или Memcached для хранения статических данных в памяти.

Я точно не знаю, но в my opinio с использованием MySQL, даже если он может быть медленнее, он может использоваться, если контент динамический. Но я уверен, что это быстрее, для большого содержимого, используя include.