где я должен делать вычисления, PHP или Mysql?

в настоящее время я делаю много вычислений. Обычно я предпочитаю делать эти вычисления в PHP, а не MySQL, хотя я знаю, что PHP не хорош в этом. Я думал, что MySQL может быть хуже. Но я обнаружил некоторые проблемы с производительностью: некоторые страницы загружались так медленно, что 30 секунд для них недостаточно! Поэтому мне интересно, где лучше делать вычисления и какие принципы для этого? Буду признателен за предложения.

8 ответов


все, что можно сделать с помощью СУБД (группировка, суммирование, AVG), где данные могут быть отфильтрованы на стороне сервера, должно быть сделано в СУБД.

Если расчет будет лучше подходить в PHP, тогда отлично, идите с этим, но в противном случае не пытайтесь делать в PHP то, для чего была создана СУБД. ТЫ ПРОИГРАЕШЬ.


Я бы рекомендовал выполнять любые вычисления уровня строк с помощью СУБД.

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

Он также помогает отделить логику приложения, это помогло мне держать мои контроллеры чище и аккуратнее при работе в среда проектирования MVC.


Я бы сказал, делать вычисления на языках, которые были созданы для этого, например, c++. Но если вы выбираете между mysql и php, php лучше.


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

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

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


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

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

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


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

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


cmptrgeekken прав, нам понадобится дополнительная информация. Но если вам нужно делать вычисления, относящиеся к запросам базы данных или выполнять над ними операции, сравнения полей certian из базы данных, сделайте это базой данных. Выполнение специальных запросов в SQL-это cheape r (насколько это касается времени, и оно оптимизировано для этого), но как PHP, так и MySQL являются серверной стороной, на самом деле не имеет значения, где вы делаете вычисления. Но, как я уже говорил, если это операции на с информацией о базе данных сделайте более сложный SQL-запрос и используйте его.


используйте PHP, не отставайте от MySQL, делая бесконечные вычисления. Если вы говорите о таких вещах, как сортировка, хорошо использовать MySQL для таких вещей, SUM, AVG, но не переусердствуйте.