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

Цитирую часть ответа, полученного мной на еще один мой вопрос:

In the PHP/MySQL world I would say stored procedures are no-go

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

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

Было бы полезно, если бы вы предоставили ссылку на вопрос для контекста.

Joel Coehoorn 17.09.2008 17:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
18
1
1 899
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

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

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

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

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

Так что да, идите в ногу со временем. Нет ничего более волнующего, чем «мы используем PHP 4 и MySQL 3».

bobobobo 22.12.2010 02:58

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

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

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

Anders Fjeldstad 12.10.2010 22:28

Погодите, это не совсем так. просто потому, что на сервере MySQL работает больше логика и CONCATS, не означает, что вы обязательно делаете больше данные хиты. Проблемы с производительностью базы данных не всегда основаны на потреблении ЦП, но я считаю, что они связаны с блокировкой таблиц, сбросом данных и тому подобным. Я действительно не знаю, но, как сказал @Anders, SP может несколько смягчить эту проблему, а не усугубить ее.

bobobobo 22.12.2010 02:57

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