Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Хранимые MySQL процедуры


Автор: BuShaRt 6.6.2012, 10:19
Забегу вперед и сразу отвечу на вопрос, почему этот топик я создал в этой ветке. Суть вопрос не в технической реализации хранимых процедур, а в том, как это отражается на архитектуре приложения, которая прежде по большей части строилась на базе PHP.

К сути. Руководитель в текущем проекте настаивает на полной инкапсуляции всей логики работы с БД в хранимые процедуры MySQL. Меня, как разработчика, такая идея очень удивила. Я уже давно свыкся с мыслью, что ведущие разработчики всего мира являются приверженцами объектно-ориентированного подхода к программированию. Благодаря этому движению мы имеем паттерна ActiveRecord и проекторы, вроде Doctrine, которые по сути призваны реляционную логику приводить к объектно ориентированной. На фоне этого использование хранимых процедур мне кажется возвратом в каменный век. Т.е. имхо с точки зрения удобства в работе - это просто катастрофа.

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

Так вот у меня вопрос. Какой смысл от этого подхода?

Автор: MoLeX 6.6.2012, 11:21
Цитата(BuShaRt @  6.6.2012,  10:19 Найти цитируемый пост)
Единственный более или менее достойный ответ был - это безопасность. 

В чем?
После взлома сайта могут залить тот же пыхадмин и получить данные из СУБД, в том числе и хранимые процедуры (а из них вывести опять все связи).

Автор: BuShaRt 6.6.2012, 12:25
MoLeX, Предполагается, что приложение не может выполнять произвольные запросы - только процедуры. 

Автор: ksnk 6.6.2012, 12:50
Цитата(BuShaRt @  6.6.2012,  12:25 Найти цитируемый пост)
Предполагается, что приложение не может выполнять произвольные запросы - только процедуры. 

Кто ограничивает приложение? Внутренняя самодисциплина разработчиков? Или есть более другие способы запретить выполнение любого запроса?

Автор: BuShaRt 6.6.2012, 13:21
Цитата(ksnk @  6.6.2012,  12:50 Найти цитируемый пост)
Кто ограничивает приложение? Внутренняя самодисциплина разработчиков? Или есть более другие способы запретить выполнение любого запроса? 

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

Добавлено через 4 минуты и 48 секунд
Просьба не уходить от основной темы топика - хранимых процедур. Вопрос безопасности - это частность, а меня интересует ваше общие мнение о данной технологии.

Автор: MoLeX 6.6.2012, 13:51
Цитата(BuShaRt @  6.6.2012,  13:21 Найти цитируемый пост)
меня интересует ваше общие мнение о данной технологии. 

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

Автор: Fortop 6.6.2012, 14:21
Смысл в отделении логики приложения от различных фронтендов.

php и web-интерфейс это не единственные потребители БД.

Автор: BuShaRt 6.6.2012, 15:34
Цитата(Fortop @  6.6.2012,  14:21 Найти цитируемый пост)
php и web-интерфейс это не единственные потребители БД. 

А если единственные?

Автор: ksnk 6.6.2012, 16:52
Цитата(BuShaRt @  6.6.2012,  10:19 Найти цитируемый пост)
На фоне этого использование хранимых процедур мне кажется возвратом в каменный век. Т.е. имхо с точки зрения удобства в работе - это просто катастрофа.

Весь проект самодельный и переписывать - добивать его будет одна и та же команда разработчиков? 

Следует понимать, что ни один сторонний модуль подключить не удастся. 

Придется самим писать все служебные утилиты навроде phpmyadmin. Ну или запускать такие утилиты под более правильным аккаунтом.

Автор: JackGmen 6.6.2012, 17:56
Я думаю этот вопрос стоит задать руководителю ...

Автор: Fortop 6.6.2012, 18:10
Цитата(BuShaRt @  6.6.2012,  15:34 Найти цитируемый пост)
А если единственные? 

А без "если".

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


Этот тот минимум, чтобы можно было хотя бы гадать на кофейной гуще.

Добавлено через 1 минуту и 13 секунд
Цитата(ksnk @  6.6.2012,  16:52 Найти цитируемый пост)
Следует понимать, что ни один сторонний модуль подключить не удастся. 

Это о чем?
Какой сторонний модуль?

Цитата(ksnk @  6.6.2012,  16:52 Найти цитируемый пост)
Придется самим писать все служебные утилиты навроде phpmyadmin. Ну или запускать такие утилиты под более правильным аккаунтом.

Разве это проблема?

Автор: Sanchezzz 6.6.2012, 18:45
Хранимые процедуры лучше использовать в триггерах когда происходят какие то события с таблицами но не более, переносить логику в БД это тупость.

Автор: BuShaRt 6.6.2012, 23:48
Fortop, 
Кратко.

Проект рассчитан на 2 месяца, задача/цель - каталог с возможность заказа (без оплаты) со сложным механизмом фильтров и выгрузкой данных в CRM, ресурсы в разумных пределах не ограниченные.

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

Не каких сторонних потрибителей, согласно спецификации, в проекте не придусмотренно.

Цитата(JackGmen @  6.6.2012,  17:56 Найти цитируемый пост)
Я думаю этот вопрос стоит задать руководителю ... 

Руководитель ответил, что так мы избавляемся от необходимости писать SQL в коде и улучшаем безопасность. Более подробных комментариев получить не удалось.

Цитата(Fortop @  6.6.2012,  18:10 Найти цитируемый пост)
Какой сторонний модуль?

Не знаю, что именно имел ввиду ksnk, но меня ооочень сильно напрягает невозможность работать с базой через ORM.

Автор: ksnk 7.6.2012, 00:18
Цитата(Fortop @  6.6.2012,  18:10 Найти цитируемый пост)
Какой сторонний модуль?

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

Автор: BuShaRt 7.6.2012, 09:51
Цитата(ksnk @  7.6.2012,  00:18 Найти цитируемый пост)
Систему комментариев на сайте, почтовые рассылки, служба online-саппорта и так далее - все это придется не брать готовыми из готовых проектов а писать самим практически с нуля... 
Если сверхзадача - написать все самим и самим же это все тащить, развивать и поддерживать, то почему бы и нет, но скорее всего задача - получить работоспособный, расширяемый проект 

Таких модулей в проекте не придусмотренно =) Все сами... ну или за счет более мелких составляющих..

Автор: ksnk 7.6.2012, 09:55
Цитата(BuShaRt @  6.6.2012,  23:48 Найти цитируемый пост)
каталог с возможность заказа


Цитата(BuShaRt @  7.6.2012,  09:51 Найти цитируемый пост)
Систему комментариев на сайте, почтовые рассылки, служба online-саппорта


Цитата(BuShaRt @  7.6.2012,  09:51 Найти цитируемый пост)
Таких модулей в проекте не придусмотренно =) 


Это точно система online-заказов?  smile 

Автор: Fortop 7.6.2012, 13:27
Цитата(ksnk @  7.6.2012,  00:18 Найти цитируемый пост)
Систему комментариев на сайте, почтовые рассылки, служба online-саппорта и так далее - все это придется не брать готовыми из готовых проектов а писать самим практически с нуля... 

И каким образом это связано с проектом и его базовой логикой?
Отдельные подсистемы поддержки, интеграция в проектом не будет слишком уж сложной.


Цитата(BuShaRt @  6.6.2012,  23:48 Найти цитируемый пост)
каталог с возможность заказа (без оплаты) со сложным механизмом фильтров и выгрузкой данных в CRM

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

В остальном... смысл небольшой есть, если у вас есть хороший DBA.
Если все пишет один человек - смысла 0.

Автор: ksnk 7.6.2012, 14:40
Цитата(Fortop @  7.6.2012,  13:27 Найти цитируемый пост)
И каким образом это связано с проектом и его базовой логикой?

C базовой логикой - никак не связано, а вот с потребностями по расширению проекта, которые придут в голову сразу после успешного запуска - связаны. 

Цитата(Fortop @  7.6.2012,  13:27 Найти цитируемый пост)
каталог с возможность заказа (без оплаты)

посмотри на http://www.ulmart.ru/ - как бы тоже каталог, без оплаты, со сложным механизмом фильтров.  smile 

Автор: Sentox 7.6.2012, 22:41
Я так понимаю в хранимых процедурах будет не бизнес - логика, а логика табличного шлюза к данным.
Но здесь две проблемы и одна из них довольно острая, как сказал 
ksnk, 
Цитата

C базовой логикой - никак не связано, а вот с потребностями по расширению проекта, которые придут в голову сразу после успешного запуска - связаны. 

100%

Жёсткая привязка к типу БД, да и к свойствам таблиц и их полям.

И так же не самая последняя проблема, это так сказать "улучшения" в версиях БД могут стать проблемой на пути перехода на версию выше, так как частенько эти "улучшения" становятся не совместимыми, что соответсвенно сокращает список версий БД для использования приложением.

Автор: Sentox 7.6.2012, 22:59
Я бы порекомендовал бы всё равно вызов процедур вынести в отдельный класс шлюза к БД на той же платформе что и само приложение.
Это бы дало лучшую гибкость вслучае, если всё таки проект будет расширяться, так как в методах такого класа можно без труда изменить логику доступа к БД, не затрагивая клиентского кода. (впринципе может Вы так и сделали smile) 

Автор: Fortop 7.6.2012, 23:29
Цитата(Sentox @  7.6.2012,  22:41 Найти цитируемый пост)
Жёсткая привязка к типу БД, да и к свойствам таблиц и их полям.

Это не имеет значения для продукта внутреннего пользования


Цитата(ksnk @  7.6.2012,  14:40 Найти цитируемый пост)
посмотри на ulmart - как бы тоже каталог, без оплаты, со сложным механизмом фильтров.

И где там сложная логика работы с БД

Идиотский и перегруженный интерфейс вижу. Но и не более того

Автор: ksnk 8.6.2012, 07:31
Цитата(Fortop @  7.6.2012,  23:29 Найти цитируемый пост)
И где там сложная логика работы с БД


Это просто пример развития "каталога без оплаты". А сложность и в facebook'е нету. Все просто  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)