Хранимые процедуры не подходят в мире php/mysql?

StackOverflow https://stackoverflow.com/questions/83419

  •  01-07-2019
  •  | 
  •  

Вопрос

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

В мире PHP/MySQL я бы сказал

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Из плюсов:Они упрощают взаимодействие с ним на нескольких языках.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top