Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2014
Помог: 0 раз(а)
Здравствуйте.
В рамках курсовой работы разрабатываем модель провайдерской системы.
Для того, чтобы у пользователей списывались деньги каждый месяц мы написали event, который запускает хранимую процедуру, которая списывает деньги со счета.
Препод сказал, что это фигня и нужно писать отдельный скрипт, который будет этим заниматься.
Скажите, почему использование хранимых процедур в данной системе плохо?
caballero
Отправлено: 09 Июня, 2014 - 18:31:17
Активный участник
Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
у препода и спроси - откуда тут знают что там за системма
Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2014
Помог: 0 раз(а)
В смысле что за система?
Это база данных mySQL. Препод сказал, что хранимая процедура это плохо для подобного случая.
tuareg
Отправлено: 09 Июня, 2014 - 19:30:51
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
А чем плох Php? Чем плох JS? Все зависит от Вас.
А так первое что приходит в голову, проблемы с расширяемостью. Хотя х.з.
"Нужно забить гвоздь, возьми молоток и забей".
Плюсы тоже есть. Все решать Вам.
LIME
Отправлено: 09 Июня, 2014 - 20:48:47
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
а ты сначала ответь почему именно хранимка?
нафига?
минусы
плохо читается
отсюда поддерживается плохо
хз как расширяяемо
а если сервер бд сменить придется
а тесты писать
хотя надеюсь придут более опытные и самому интересно
сам интуитивно обхожу стороной хранимки и тригеры
только раз триггеры применил но там я точно знал зачем (Добавление)
а если надо будет добааить условия которые невозможно учесть в бд?
а если например перенесете данные в единое хранилище для мнногих приложений?
и каждое из приложений будет накладывать свои ограничения
короче поддержка хромает
наерное
esterio
Отправлено: 10 Июня, 2014 - 11:38:32
Активный участник
Покинул форум
Сообщений всего: 5027
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
получаеться холивар CRON+PHP vs EVENT + PROCEDURE.
как по мне если функционал меняться будет редко то второй вариант подходит не чем не хуже чем первый.
П.С. не раз использовали тригеры и процедуры. если их правильно готовить то ничего страшного не происходит.
и также вопрос
LIME пишет:
а если сервер бд сменить придется
Сколько раз за вашу практику менялся сервер БД? за мою ниразу. а если еще учесть что всеравно большинство запросов в том же ПХП пишутсья под конкретную БД, то тем более уверен что никогда
Что-бы не было недарозумений сразу скажу что проблема только
LIME пишет:
короче поддержка хромает
Поетому написал выше что оправдано если если функционал меняться будет редко
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
esterio пишет:
Сколько раз за вашу практику менялся сервер БД?
1 раз с mysql на redis значительная часть переехала
но это как бы 1 из многих "если"
лично для хватит только того что надо увидеть запрос хранимки и лезть ее смотреть и это при отсутствии всякой видимой выгоды
LIME пишет:
а ты сначала ответь почему именно хранимка?
типа "просто я знаю что это можно делать и потому сделал" (Добавление)
esterio пишет:
если функционал меняться будет редко
ну в этом случае вообще можно забыть про всякую архитектуру и писать plain код )))
EuGen
Отправлено: 10 Июня, 2014 - 18:42:48
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
TL;DR
Если вы не знаете, нужны ли вам хранимые функции/процедуры, то они вам не нужны.
Use-cases
Несмотря на очевидные недостатки, у хранимого кода есть области применения. Основная из них - когда требуется высокая безопасность и у хранимых данных нет доверия к коду, работающему с ними. Иными словами, когда разработчик приложения - не доверенное лицо. У него может не быть никаких прав, кроме вызова ограниченного набора процедур, возвращающих лишь ту часть данных, к которым у него есть доступ.
Кроме того, иногда бывает нужно реализовать вещи которые попросту отсутствуют в СУБД. Для MySQL это - например, замена по регулярному выражению. Не так давно я реализовал это. Конечно, есть UDF - но далеко не всегда возможно их использовать (равно как и устанавливать сторонние библиотеки)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Stierus
Отправлено: 10 Июня, 2014 - 23:22:36
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2133
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
Скажите, почему использование хранимых процедур в данной системе плохо?
1. Бизнес-логика размазывается по 2 системам - часть кода у вас на php (обращение к внешним системам, валидации, обработки ошибок, логи и тд), часть в хранимых процедурах (списание, смена статусов - все, что внутри транзакции)
2. Если вам придется шардировать данные, как на хранимых процедурах вы организуете работу с несколькими удаленными серверами?
3. Сложно организовать детальное логирование происходящего в системе, обработку разных типов ошибок. А вы работаете с деньгами, все ходы должны быть записаны
4. Вы не сможете некритичные данные получать с ro-реплик, разгружая rw-базу.
Наверняка, есть еще, но это что первое в голову сразу приходит
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.