2011-04-26 3 views
2

Когда я впервые попал в базы данных, я использовал SQL Server. Я понял, что первоначально с классическим ASP. Одна из больших вещей, о которых нам говорили, заключается в том, что вы сохранили много времени в своих транзакциях SQL, если используете хранимые процедуры, а не работаете с командами ASP SQL (делаете это «в строке», я полагаю). Поэтому почти все, что я когда-либо хотел делать с базой данных, я написал хранимую процедуру, а затем вызвал хранимую процедуру из своего кода.Сохраненные функции в MySQL - стоит ли?

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

Однако мне приходит в голову, что я просто делаю это неправильно и не понимаю этого. Есть ли существенное преимущество в использовании хранимых функций в MySQL? Я создаю довольно хороший веб-сайт, который обрабатывает много вызовов в базе данных. Все вызовы выполняются в соответствии с моим PHP-кодом. Будет ли я лучше использовать хранимые функции для вызовов, которые я делаю последовательно, а затем просто передавать переменные функции из PHP?

ответ

4

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

Некоторые из преимуществ хранимых процедур

  1. Многократное/Это, безусловно, может быть выполнена в программном коде, но он бьет ад из писать один и тот же запрос, с 10 суб присоединяется 15 раз

  2. Охрана - когда sp были взрывами, на которые наступали инъекции sql, и один из способов уменьшить вашу экспозицию - предложить параметризованные sp, которые автоматически дезинфицируют вас автоматически для каждого случая

  3. Документация по определению на действительно больших таблицах таблиц не всегда достаточна для объяснения того, что вы храните и почему и почему SP иногда дает вам и тем, которые приходят после вас, что было предназначено.

  4. Определенный интерфейс.

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

Некоторые минусы

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

  2. Отсутствие управления конфигурацией в SP - Несмотря на то, что установлены процедуры и инструменты для управления кодом SP, значительно отстает.

+0

"пару лет назад"? Я видел их в упадке много-много лет. – Xailor

0

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

Независимо от того, как я отвечаю, что это священная война вопрос, который был бить до смерти (на этом самом сайте): MySQL Stored Procedure vs. complex query

0

Это тот же вопрос, спрашивая, «Должен ли я разбить свой код в методах/функцию/процедуру и вызывать их, или я должен кодировать все в мою текущую функцию?»

Некоторые из преимуществ, которые хранимые процедуры дают вам:

  1. Легче тестирования. Вы можете протестировать хранимые процедуры без запуска приложения.
  2. Легкое развитие. Вы можете заставить разработчика БД хранить хранимые процедуры, а разработчик графического интерфейса писать пользовательский интерфейс и т. Д.
  3. Проще всего портировать в другую базу данных. Все изменения содержатся в базе данных и контракт с приложением (параметры, переданные хранимым процедурам) не должны меняться.
  4. Возможность использования логики в хранимой процедуре из нескольких передних концов. Вам не нужно закодировать одну и ту же логику создания клиента в каждом приложении, которое должно создать нового клиента.

Большой недостаток заключается в том, что вы должны изучать несколько предметов и, возможно, использовать несколько инструментов. Это одна из главных причин использования Linq для SQL в .NET. Вам не нужно изучать SQL, и все это содержится в коде .Net.

Мы используем хранимые процедуры для всего. Он работает исключительно хорошо. Абстракция - ваш друг.

+0

Я думаю, что есть еще один недостаток: масштабируемость. Базы данных, возможно, самая сложная часть архитектуры для масштабирования. Это можно сделать, но это сложнее, чем, скажем, добавить еще несколько PHP или Java-серверов. Поэтому, если масштабируемость вызывает беспокойство, вам может понадобиться сбалансировать, какая часть вашей бизнес-логики включена в ваш сервер базы данных, и что может быть лучше масштабировано, если вы будете распространяться среди ваших серверов веб-приложений или приложений. – Marvo

+0

Что касается контроля версий? Если SQL находится внутри исходного кода, изменения в SQL будут храниться в репозитории исходного кода (SVN, CVS и т. Д.). – Michael

+0

Michael, Весь наш исходный код хранимой процедуры находится в TFS. Вы правы, что проще управлять, если SQL хранится в источнике для приложения. –