|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Скажите, пожалуйста, в чем плюсы и минусы хранимых процедур? В каких проектах их стоит использовать, а в каких не стоит? Или дайте ссылку, где про это можно почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 10:43 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Стас Агарков, ХП 1 -Быстрее 2 -Позволяют разграничивать доступ , по хорошему пользователю разрешен только его набор ХП... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 11:43 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Стас АгарковСкажите, пожалуйста, в чем плюсы и минусы хранимых процедур? В каких проектах их стоит использовать, а в каких не стоит? Или дайте ссылку, где про это можно почитать. Преимущества такие же как и в языках программирования. Если необходимо с sql работать напрямую, то зачем отправлять к СУБД огромные sql-запросы если проще заранее формализовать логику работы с БД и вызывать уже готовую ХП? Плюс, если другое ПО будет работать с БД (что тасто бывает), без ХП они там хрен разберутся в наборе таблиц. Но если использовать EF или NH, то в принципе можно и обойтись логикой в программе, мне кажется. Хотя и не всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 12:26 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
dvimСтас Агарков, ХП 1 -Быстрее 2 -Позволяют разграничивать доступ , по хорошему пользователю разрешен только его набор ХП... Быстрее чем что? SQL запрос всё равно придётся выполнять. И доступ к данным разграничивается на уровне таблиц и даже записей без ХП. ХП выполнются на сервере БД. Поэтому ХП полезно использовать в задачах, которые "плотно" работают с БД, чтобы исключить сетевой обмен данными. ХП позволяют централизовать логику управления записями БД в одном защищённом месте - на сервере. ХП упрощают разработку программ на языках 3го поколения, когда программисты плохо знают SQL и тем более особенности его реализации на конкретной СУБД. На SQL невозможно решать ряд задач. ХП позволяют расширять возможности СУБД и SQL. Из минусов, могу назвать трудности с adhoc запросами. ХП тоже нужно писать. Т.е. к коду самого SQL запроса добавляется ещё код ХП, который нужно писать, отлаживать и сопровождать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 14:18 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
А мне захотелось про недостатки: ХП зависят от типа и версии СУБД, что практически исключает портирумость проекта при переносе проекта кроме переноса кода, который может сделать малоквалифицированный специалист, требуется выполнить настройки БД, которые под силу только профессионалу создание ХП требуют наличия необходимых для этого привилегий использование ХП усложняет поддержку и развитие проекта за счет переноса части бизнес логики в СУБД, что усложняет архитектуру приложения языки на которых пишут ХП, зачастую уступают по возможностям "нормальным" языкам программирования при выполнении кода в ХП сложнее или невозможно лимитировать потребляемые ресурсы ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 15:28 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Kachalov, >>ХП зависят от типа и версии СУБД, что практически исключает портирумость проекта +1. От версии СУБД зависимость не сильная. Хотя бывали проблемы с тем, что после обновления СУБД часть ХП разваливалась. >>при переносе проекта кроме переноса кода, который может сделать малоквалифицированный специалист, требуется выполнить настройки БД, которые под силу только профессионалу Несогласен. Портирование на новую СУБД это всегда сложная задача. ХП скорее упрощают её, потому что логикой транзакций БД занимаются специалисты. В свою очередь разработчики клиентских приложений зачастую слабо знают СУБД и не могут квалифицированно оптимизировать транзакции БД прошитые в коде прилоджения. >>создание ХП требуют наличия необходимых для этого привилегий неоднозначное утверждение. я не считаю хорошей практикой разрешать изменение БД кому попало. Так что это скорее достоинство ХП. >>использование ХП усложняет поддержку и развитие проекта за счет переноса части бизнес логики в СУБД, что усложняет архитектуру приложения +1. Плохо документированные ХП осложняют их использование в приложениях БД. С другой стороны перенос приложений на новый framework при наличии ХП упрощается, поскольку код транзакций БД не меняется. В общем нужно внимательно относиться к организации процеса разработки. >>языки на которых пишут ХП, зачастую уступают по возможностям "нормальным" языкам программирования +1. Есть такое дело. Не всякие сложные вычисления можно эффективно закодировать на языке ХП. Но прогресс в этом направлении есть. В частности некоторые СУБД поддерживют компиляцию ХП или написание ХП на языках 3го поколения. >>при выполнении кода в ХП сложнее или невозможно лимитировать потребляемые ресурсы несогласен. ХП пишут так, чтобы рационально использовать ресурсы системы. Возможности лимитирования наверное звисят от конкретной СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 17:07 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
mcureenab >>ХП зависят от типа и версии СУБД, что практически исключает портирумость проекта +1. От версии СУБД зависимость не сильная. Хотя бывали проблемы с тем, что после обновления СУБД часть ХП разваливалась. - Вы какую-то конкретную СУБД имеете в виду? Если, как Вы говорите, "часть ХП разваливалась" - это разве не зависимость от версии (про тип понятно - переносимость нулевая)? mcureenab >>при переносе проекта кроме переноса кода, который может сделать малоквалифицированный специалист, требуется выполнить настройки БД, которые под силу только профессионалу Несогласен. Портирование на новую СУБД это всегда сложная задача. ХП скорее упрощают её, потому что логикой транзакций БД занимаются специалисты. В свою очередь разработчики клиентских приложений зачастую слабо знают СУБД и не могут квалифицированно оптимизировать транзакции БД прошитые в коде прилоджения. - при переносе многих проектов с одной машины на другую (от одного хостера к другому и т. п.) обычно хватает дампа базы. В случае ХП простым дампом обычно не отделаешься. Тезис про разработчиков не понял, так как не ясно какое это имеет отношение к проблемам переноса. mcureenab >>создание ХП требуют наличия необходимых для этого привилегий неоднозначное утверждение. я не считаю хорошей практикой разрешать изменение БД кому попало. Так что это скорее достоинство ХП. - пример из жизни: человек приносит сайт использующий ХП на хостинг и оказывается что ему нужен более дорогой тарифный план чем он предполагал, так как хостер не дает ему привилегий необходимых для создания и исполнения ХП в рамках shared-хостинга. Человеку однозначно придется переплачивать за использование ХП. mcureenab >>использование ХП усложняет поддержку и развитие проекта за счет переноса части бизнес логики в СУБД, что усложняет архитектуру приложения +1. Плохо документированные ХП осложняют их использование в приложениях БД. С другой стороны перенос приложений на новый framework при наличии ХП упрощается, поскольку код транзакций БД не меняется. В общем нужно внимательно относиться к организации процеса разработки. - не хочется дискутировать на эту тему устраивая нудный холивар на тему кто должен хранить данные (по моему СУБД), а кто должен их обрабатывать, т. е. где должна находиться бизнес логика (по моему логику надо писать в приложении на нормальном языке программирования). На дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я. mcureenab >>языки на которых пишут ХП, зачастую уступают по возможностям "нормальным" языкам программирования +1. Есть такое дело. Не всякие сложные вычисления можно эффективно закодировать на языке ХП. Но прогресс в этом направлении есть. В частности некоторые СУБД поддерживют компиляцию ХП или написание ХП на языках 3го поколения. - ага и собственные файловые системы :) Ждем дискуссии на тему "СУБД vs Операционная Система" mcureenab >>при выполнении кода в ХП сложнее или невозможно лимитировать потребляемые ресурсы несогласен. ХП пишут так, чтобы рационально использовать ресурсы системы. Возможности лимитирования наверное звисят от конкретной СУБД. - прямо все пишут "так, чтобы рационально использовать ресурсы системы"? неужели среди ДБА нет криворуких которые своей ХП положат базу? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2009, 19:02 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Очень много буков, но рекомендую прочитать для прояснения вопроса. Комменты доставляют не хуже статьи. Где наша бизнес-логика, сынок? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2010, 17:25 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
н00бОчень много буков, но рекомендую прочитать для прояснения вопроса. Хоть и очень нудное чтиво, но прочитал. Насчет букв - не обманули. Их действительно много. Часто смешных, как например о том, что хранимая процедура должна работать только с одной таблицей. к тому же автор часто (на протяжении всей статьи) путает tier с layer, хотя определение привел сам же, в самом начале. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2010, 17:51 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
iscrafm Часто смешных, как например о том, что хранимая процедура должна работать только с одной таблицей. Насколько я понял, автор статьи придерживается такой точки зрения, что работа с базой данных должна быть основана исключительно на CRUD-операциях, в данном случае, на мой взгляд, работа с одной таблицей для хранимых процедур - это естественное поведение. Я понял статью в том ключе, что не стоит нагружать базу какими-либо операциями, кроме чтения-записи-изменения, а все действия бизнес-логики проводить в соответствующем архитектурном слое. Грубо говоря, у нас есть сущность "Договор", которой отвечает соответствующая таблица в БД. Так вот, если есть метод бизнес-логики "Добавить согласующих на договор", который заносит данные в дочернюю таблицу "Договор-СогласующийПерсонал", то этот метод должен хотеть от DAL только возможности внести нужные строки в БД, в одну таблицу. Все сопутствующие действия - рассылка оповещений по Email, занесение согласующих в группы AD (я для примера), должны лежать в теле BL-метода наравне с методами DAL. Право же, глупо будет смотреться, когда есть ХП, которая пишет в несколько таблиц, скажем, заносит согласующих и для кадого согласующего в другой таблице выставляет какой-то флга, и _наравне_ с этой ХП есть другая логика. Пример: public void AddAgreementors( Contract con, List<Employee> agrs) { //здесь зовем ХП, которая работает более чем с одной таблицей foreach (var emp in agrs) { AddAgreementorToDB( con.id, emp.id); } //здесь отсылаем оповещение foreach (var emp in agrs) { SendNotification(emp.email); } //здесь добавляем их в группу AD, которая имеет доступ к системе учета договоров foreach (var emp in agrs) { AddToContractsADGroup(emp.login); } } Если ХП в вызове метода AddAgreementorToDB работает с несколькими таблицами, налицо размазывание бизнес-логики по двум лейреам (BL и DAL) и по двум же тиерам (тиер веб-сервера и тиер сервера СУБД). Если я не прав, прошу меня поправить. Мне очень интересен данный вопрос, особенно с учетом другой моей темы , в которую никто не отвечает : - ( . ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2010, 21:19 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Kachalov На дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я. Так речь то об SQL vs ХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 02:28 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
н00бПраво же, глупо будет смотреться, когда есть ХП, которая пишет в несколько таблиц, скажем, заносит согласующих и для кадого согласующего в другой таблице выставляет какой-то флга, и _наравне_ с этой ХП есть другая логика. не знаю что у Вас за логика, но запись в несколько таблиц в процедуре - это так же естественно, как и создание нескольких связанных таблиц. н00бМне очень интересен данный вопрос, особенно с учетом другой моей темы , в которую никто не отвечает : - ( . лично мне, периодически возникающие эксперименты с "натягиванием" объектов на реляционную структуру совсем не интересны. Возможно, не только мне. Поэтому и не отвечают. В качестве предположения. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 10:17 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Kachalov - при переносе многих проектов с одной машины на другую (от одного хостера к другому и т. п.) обычно хватает дампа базы. В случае ХП простым дампом обычно не отделаешься. Тезис про разработчиков не понял, так как не ясно какое это имеет отношение к проблемам переноса. под простым дампом как я понял почему-то sql дамп подразумивается ? перенос хп не добавит особых проблем к итак существующим, т.к. все равно придется переносить спец утилитами, которые перенесут в том исле и хп. переносить руками глупо т.к. необходимо будет ручками переколбасить типы данных, автоинкрементные->сиквенсы и многое другое. а так утилита и sql диалект подправит, в случае sql дампа придется это руками делать, что опять же не интересно. Kachalov - пример из жизни: человек приносит сайт использующий ХП на хостинг и оказывается что ему нужен более дорогой тарифный план чем он предполагал, так как хостер не дает ему привилегий необходимых для создания и исполнения ХП в рамках shared-хостинга. Человеку однозначно придется переплачивать за использование ХП. странная логика, если если идет о логике, то же это за приложение с логикой что рассматривается вариант хостить на хостинге, да еще и таком левом ? единственное объяснение столь странного поведения хостера - криво установленая субд, а не возможность выдать права побочный эффект кривизны. тут не прозвучало, но имхо оторванную от субд логику просто слишком сложно супортить. когда логика в субд потребуется я гораздо меньше кода, меньше вариантов ошибок в нем и главное субд способна отслеживать зависимости в коде (оракл, дб2). субд самостоятельно пометит инвалидные процедуры и не позволит их запустить. кроме этого более оптимально используются ресурсы, не нужно гонять гигабайты данных для обработки на апп-сервер/клиент. KachalovНа дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я. по моему вы так и не поняли о чем они говорили ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 14:25 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
KachalovНа дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я. на SQL.RU они высказывались? Можете дать ссылку, где с примерами дана реализация 3-х звенки, которая не вызовет критики со стороны 2-х звенщиков и заявлениями, что это они сделают и без добавления лишнего звена. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 16:06 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Оглянитесь шире. Трехзвенок полно, практически все крупные информационные системы. А сделать что-то, но в клиент серверной архитектуре,ну наверное можно и что это доказывает? По сабжу: для себя выбрал вариант без ХП (точнее ХП есть, но не на каждый класс. Только вспомогательные вещи, например расчет остатков). Причины:поддержка продуктом нескольких субд, трехзвенка со встроенным в сервер приложений ORM, встроенный дизайнер классов - пользователь может сам добавить атрибуты (в варианте с ХП их пришлось бы как-то менять). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 17:45 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
2-х звенщикМожете дать ссылку - можете объяснить зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 19:44 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Kachalov2-х звенщикМожете дать ссылку - можете объяснить зачем? Да так хочеться повидать живой пример преимущества n-звенок, а то в своё время холивар шел правда в 2 раза меньший, чем про TJ7. И его модераторы тоже прикрыли за отсутствием споров по существу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 20:09 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
2-х звенщик на SQL.RU они высказывались? Можете дать ссылку, где с примерами дана реализация 3-х звенки, которая не вызовет критики со стороны 2-х звенщиков и заявлениями, что это они сделают и без добавления лишнего звена. че-то тут поголовно все путают теплое с мягким. 3-tier совершенно не запрещает помещение бизнес логики в хп ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 20:26 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Yo.!че-то тут поголовно все путают теплое с мягким. 3-tier совершенно не запрещает помещение бизнес логики в хп ... - не запрещает, но тогда вопрос "зачем" начинает звучать более остро ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 20:35 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Yo.! 3-tier совершенно не запрещает помещение бизнес логики в хп ... А это нигде и не утверждалось. И вообще мы уклоняемся от темы, в ней ничего не спрашивалось об n-звенках. Просто про них зашла речь, вот и не удержался ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 20:41 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
2-х звенщикYo.! 3-tier совершенно не запрещает помещение бизнес логики в хп ... А это нигде и не утверждалось. И вообще мы уклоняемся от темы, в ней ничего не спрашивалось об n-звенках. Просто про них зашла речь, вот и не удержался нужно себя держать в руках, стараться. К чему бесполезные споры. Нравится с файлами, почтой или обрудованием работать из СУБД - работайте. Свобода выбора! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 21:01 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Kachalov - не запрещает, но тогда вопрос "зачем" начинает звучать более остро (С) анекдот- оператор, до меня не доходят смс сообщения ! - ну это ... прочтите их еще раз ... повторяю: логика в хп дает более оптимальное использование ресурсов, более надежный код отслеживаемый средствами субд, гораздо менее многословный язык (меньше кода, меньше ошибок) iscrafm нужно себя держать в руках, стараться. К чему бесполезные споры. Нравится с файлами, почтой или обрудованием работать из СУБД - работайте. Свобода выбора! ну если вы привыкли к забиванию гвоздей микроскопом то выбирайте на здоровье, тока чего на здоровых людей при этом кидаться ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 21:29 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
Yo.!iscrafm нужно себя держать в руках, стараться. К чему бесполезные споры. Нравится с файлами, почтой или обрудованием работать из СУБД - работайте. Свобода выбора! ну если вы привыкли к забиванию гвоздей микроскопом то выбирайте на здоровье, тока чего на здоровых людей при этом кидаться ? к чему это и кому? какие гвозди и какие микроскопы? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 21:31 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
iscrafmк чему это и кому? какие гвозди и какие микроскопы? это явно фраза не вам. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 21:38 |
|
Хранимые процедуры против обычных SQL-запросов
|
|||
---|---|---|---|
#18+
iscrafm к чему это и кому? какие гвозди и какие микроскопы? к тому, что хп предназначены для реализации бизнес логики и если вы отчего-то этим инструменты пытаетесь решать не свойственные инструменту задачи типа работы с оборудованием ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2010, 21:38 |
|
|
start [/forum/topic.php?fid=33&msg=36395742&tid=1548373]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 424ms |
0 / 0 |