Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Недостатки хранимых процедур

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
der1992
Отправлено: 09 Июня, 2014 - 18:11:56
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте.
В рамках курсовой работы разрабатываем модель провайдерской системы.
Для того, чтобы у пользователей списывались деньги каждый месяц мы написали event, который запускает хранимую процедуру, которая списывает деньги со счета.
Препод сказал, что это фигня и нужно писать отдельный скрипт, который будет этим заниматься.
Скажите, почему использование хранимых процедур в данной системе плохо?
 
 Top
caballero
Отправлено: 09 Июня, 2014 - 18:31:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




у препода и спроси - откуда тут знают что там за системма


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
der1992
Отправлено: 09 Июня, 2014 - 18:36:34
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




В смысле что за система?
Это база данных mySQL. Препод сказал, что хранимая процедура это плохо для подобного случая.
 
 Top
tuareg
Отправлено: 09 Июня, 2014 - 19:30:51
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




А чем плох Php? Чем плох JS? Все зависит от Вас.
А так первое что приходит в голову, проблемы с расширяемостью. Хотя х.з.
"Нужно забить гвоздь, возьми молоток и забей".
Плюсы тоже есть. Все решать Вам.
 
 Top
LIME
Отправлено: 09 Июня, 2014 - 20:48:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а ты сначала ответь почему именно хранимка?
нафига?
минусы
плохо читается
отсюда поддерживается плохо
хз как расширяяемо
а если сервер бд сменить придется
а тесты писать
хотя надеюсь придут более опытные и самому интересно
сам интуитивно обхожу стороной хранимки и тригеры
только раз триггеры применил но там я точно знал зачем
(Добавление)
а если надо будет добааить условия которые невозможно учесть в бд?
а если например перенесете данные в единое хранилище для мнногих приложений?
и каждое из приложений будет накладывать свои ограничения
короче поддержка хромает
наерноеУлыбка
 
 Top
esterio
Отправлено: 10 Июня, 2014 - 11:38:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




получаеться холивар CRON+PHP vs EVENT + PROCEDURE.
как по мне если функционал меняться будет редко то второй вариант подходит не чем не хуже чем первый.

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

Сколько раз за вашу практику менялся сервер БД? за мою ниразу. а если еще учесть что всеравно большинство запросов в том же ПХП пишутсья под конкретную БД, то тем более уверен что никогда

Что-бы не было недарозумений сразу скажу что проблема только
LIME пишет:
короче поддержка хромает

Поетому написал выше что оправдано если если функционал меняться будет редко

(Отредактировано автором: 10 Июня, 2014 - 11:39:30)

 
 Top
LIME
Отправлено: 10 Июня, 2014 - 13:58:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




esterio пишет:
Сколько раз за вашу практику менялся сервер БД?
1 раз с mysql на redis значительная часть переехала
но это как бы 1 из многих "если"
лично для хватит только того что надо увидеть запрос хранимки и лезть ее смотреть и это при отсутствии всякой видимой выгоды
LIME пишет:
а ты сначала ответь почему именно хранимка?

типа "просто я знаю что это можно делать и потому сделал"
(Добавление)
esterio пишет:
если функционал меняться будет редко
ну в этом случае вообще можно забыть про всякую архитектуру и писать plain код )))
 
 Top
EuGen Администратор
Отправлено: 10 Июня, 2014 - 18:42:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




TL;DR

Если вы не знаете, нужны ли вам хранимые функции/процедуры, то они вам не нужны.

Use-cases

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

Кроме того, иногда бывает нужно реализовать вещи которые попросту отсутствуют в СУБД. Для MySQL это - например, замена по регулярному выражению. Не так давно я реализовал это. Конечно, есть UDF - но далеко не всегда возможно их использовать (равно как и устанавливать сторонние библиотеки)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Stierus Супермодератор
Отправлено: 10 Июня, 2014 - 23:22:36
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
Скажите, почему использование хранимых процедур в данной системе плохо?

1. Бизнес-логика размазывается по 2 системам - часть кода у вас на php (обращение к внешним системам, валидации, обработки ошибок, логи и тд), часть в хранимых процедурах (списание, смена статусов - все, что внутри транзакции)
2. Если вам придется шардировать данные, как на хранимых процедурах вы организуете работу с несколькими удаленными серверами?
3. Сложно организовать детальное логирование происходящего в системе, обработку разных типов ошибок. А вы работаете с деньгами, все ходы должны быть записаны Улыбка
4. Вы не сможете некритичные данные получать с ro-реплик, разгружая rw-базу.

Наверняка, есть еще, но это что первое в голову сразу приходит
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB