Хранимые процедуры в мире php / mysql? - PullRequest
18 голосов
/ 17 сентября 2008

Я цитирую часть ответа, который я получил за другой мой вопрос :

В мире PHP / MySQL я бы сказал хранимые процедуры запрещены

Я хотел бы знать: это так? Зачем? Почему нет?

[править] Я имею в виду это как общий вопрос без особой необходимости [/ edit]

Ответы [ 10 ]

23 голосов
/ 17 сентября 2008

Я разрабатываю и поддерживаю большое приложение PHP / MySQL. Вот мой опыт с хранимыми процедурами.

Со временем наше приложение стало очень сложным. И при всей логике на стороне php некоторые операции будут запрашивать базу данных более чем 100 короткими запросами.

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

В нашей последней версии программного обеспечения мы приняли решение перенести часть логики в хранимые процедуры для сложных операций.

Мы достигли значительного прироста производительности благодаря тому, что нам не приходилось пересылать данные между PHP и MySQL и обратно.

Я согласен с другими постерами, что PL / SQL не является современным языком и его трудно отлаживать.

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

10 голосов
/ 17 сентября 2008

При использовании хранимых процедур с MySQL вам часто нужно использовать интерфейс mysqli в PHP, а не обычный интерфейс mysql .

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

Интерфейс mysqli имеет функции для обработки этих множественных наборов результатов, такие как mysqli_more_results и mysqli_next_result .

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

6 голосов
/ 19 сентября 2008

Обычно я держусь подальше от хранимых процедур, потому что это увеличивает нагрузку на базу данных, что в 99% случаев является вашим самым большим узким местом. Добавление нового php-сервера - ничто по сравнению с копированием базы данных MySQL.

6 голосов
/ 17 сентября 2008

Есть ли у вас особые потребности, которые заставляют вас их учитывать? Хранимые процедуры гораздо менее переносимы, чем «простой» SQL, поэтому обычно люди не хотят их использовать. Кроме того, написав значительную долю PL / SQL, я должен сказать, что процедурный способ написания кода добавляет сложности, и он просто не очень современный или тестируемый. Они могут быть полезны в некоторых особых случаях, когда вам нужно оптимизировать, но я бы, конечно, подумал дважды. У Джеффа похожих мнений .

2 голосов
/ 17 сентября 2008

Это субъективный вопрос.

Я бы лично включил все вычисления в PHP и действительно использовал MySQL только как таблицу.

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

1 голос
/ 17 сентября 2008

Я бы не сказал «хранимые процедуры не нужны», я бы сказал: «Не используйте их без уважительной причины».

Хранимые процедуры MySQL имеют особенно ужасный синтаксис (Oracle и MSSQL тоже довольно ужасны), их обслуживание просто усложняет ваше приложение

Используйте хранимую процедуру, если у вас есть для этого реальная (измеримая) причина, в противном случае - нет. В любом случае, это мое мнение.

0 голосов
/ 18 сентября 2008

Я ограниченно использую хранимые процедуры, и это хорошо работает. Я являюсь ведущим разработчиком для клиентов одной из моих компаний, работающих на их веб-сайте e-comm. У клиента есть стандартная система, мы реализовали набор хранимых процедур в своей системе и создали API для взаимодействия с ним. Это позволило нам абстрагировать их базу данных, и они могли реализовать логику в хранимых процедурах. Простой, но очень хорошо отвечающий требованиям бизнеса.

0 голосов
/ 18 сентября 2008

Вы также должны знать, что хранимые процедуры не поддерживались в Mysql до версии 5.0. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html Также хранимые процедуры в этой реализации были немного странными. Теперь, когда Mysql 5.1 начинает появляться в дикой природе, я вижу больше использования хранимых процедур с Mysql.

0 голосов
/ 17 сентября 2008

Я думаю, что использование хранимых процедур может предложить некоторую абстракцию в определенных приложениях, поскольку в любом случае, когда вы будете использовать один и тот же кусок кода SQL для обновления или добавления тех же данных, вы можете затем создать один sproc save_user ($ attr .. ...) скорее, повторяя себя повсюду.

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

0 голосов
/ 17 сентября 2008

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

Плюс: они облегчают взаимодействие с ним на нескольких языках.

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

В наши дни популярно использовать ORM, но я лично считаю, что ORM - это BadThing ( Вопрос: 82882 )

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