Облачные вычисления - PHP и MySQL - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть алгоритм, написанный на PHP, который связывается с MySQL. На стандартном сервере виртуального хостинга для расчета требуется около 5 секунд. У меня вопрос - как я могу ускорить его (конечно, без изменения самого алгоритма), использовать выделенный / VPS, может быть, некоторые облачные вычисления или ...?

Каковы ваши предложения?

РЕДАКТИРОВАТЬ: Это Алгоритм Дейкстры для общественного транспорта. У меня есть (только) 3500 уникальных остановок.

Короче - у меня есть несколько массивов для записи активных остановок, предыдущих остановок, lineToStop, totalTime, travelTime и так далее. Я зацикливаюсь на количество остановок, получаю идентификатор остановки, строю соединения с другими остановками (на основе времени на этом активном останове), снова зацикливаюсь на размере остановок (), чтобы найти тот с наименьшим значением, отметьте его как активен и продолжается снова.

Я понял, что это проблема оптимизации, поэтому -> Оптимизация / кэширование алгоритма Дейкстры

Ответы [ 5 ]

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

Когда вы покупаете авиабилет, первый вопрос не «куда вы хотите пойти?» - это "куда ты идешь от ?" Другими словами, без очень, очень, гораздо больше деталей, мы просто догадываемся.

Самый верный ответ на вопрос "Как я могу ускорить его?" в любом случае это:

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

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

Пример: ускорение метода на 1000% не имеет смысла, если это метод, который вызывается один раз в начале вашей программы, и программа тратит 90% своего времени на ожидание дискового ввода-вывода. Другой пример: создание дискового массива для устранения узких мест ввода-вывода, когда программа тратит 90% времени на ожидание сервера SQL, который выполняет сложный неиндексированный запрос. Это не единственные проблемы, с которыми вы можете столкнуться, и они даже не являются взаимоисключающими - но вам нужно знать, какие у вас проблемы, прежде чем приступить к решению одного . «Это медленно» - это не описание проблемы, это просто симптом (точно так же, как «головная боль» может быть симптомом 9000 различных заболеваний).


TL; DR: Серебряной пули нет .

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

Сначала вам нужно найти узкое место.Используйте профилировщик (xdebug) и посмотрите, где в вашем PHP медлительность.Может случиться так, что большую часть времени ожидает подключения к MySQL, или MySQL, выполняющей обработку, или что-то еще.Если медлительность на самом деле присутствует в вашем коде алгоритма, то параметры изменяют ваш алгоритм, чего вы не хотите.Или добавьте больше вычислительной мощности.Но я бы определенно выяснил, где именно медлительность, прежде чем смотреть на то, как потратить на это больше обработки.

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

У вас есть запрос к базе данных внутри цикла. Вы пытались получить ВСЕ строки один раз и просмотреть результаты в памяти? Если вы делаете 3500 запросов при загрузке 1 страницы, это может быть быстрее.

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

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

Я думаю, что вы пошли гораздо проще: оптимизировав алгоритм и настроив свой сервер БД. Уверен, что такое время можно сократить в 10 и более раз, используя традиционные методы оптимизации. Кстати, вы уже пользовались?

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

В зависимости от алгоритма и наличия узкого места в вашем php-коде или в базе данных, вы можете попробовать использовать php-компилятор, как, например, в facebooks hiphop: http://developers.facebook.com/blog/post/358/

Поскольку у вас не так много трафика, а вместо этого один алгоритм, который запускается один раз и который должен быть быстрее, вам, вероятно, нужен компилятор php (как тот, который я связал), а не кэш-код операции (например, bcompiler или similair), поскольку это помогает только при выполнении большого количества сценариев.

Все кэширование кода операции ускоряет синтаксический анализ сценариев, но в вашем случае это происходит только один раз за 5-секундный запуск сценария и, вероятно, не является узким местом. Однако компилятор переводит ваш php-код в собственную сборку, которая, хотя и не становится такой же быстрой, как эквивалент c, все равно в среднем в 2 раза быстрее, чем runnning в PHP.

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

О каком алгоритме мы говорим здесь?

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