powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Хранимые процедуры против обычных SQL-запросов
151 сообщений из 151, показаны все 7 страниц
Хранимые процедуры против обычных SQL-запросов
    #36394949
Стас Агарков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, пожалуйста, в чем плюсы и минусы хранимых процедур? В каких проектах их стоит использовать, а в каких не стоит? Или дайте ссылку, где про это можно почитать.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395018
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас Агарков,
ХП
1 -Быстрее
2 -Позволяют разграничивать доступ , по хорошему пользователю разрешен только его набор ХП...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395053
didro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас АгарковСкажите, пожалуйста, в чем плюсы и минусы хранимых процедур? В каких проектах их стоит использовать, а в каких не стоит? Или дайте ссылку, где про это можно почитать.

Преимущества такие же как и в языках программирования. Если необходимо с sql работать напрямую, то зачем отправлять к СУБД огромные sql-запросы если проще заранее формализовать логику работы с БД и вызывать уже готовую ХП? Плюс, если другое ПО будет работать с БД (что тасто бывает), без ХП они там хрен разберутся в наборе таблиц.
Но если использовать EF или NH, то в принципе можно и обойтись логикой в программе, мне кажется. Хотя и не всегда.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395163
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvimСтас Агарков,
ХП
1 -Быстрее
2 -Позволяют разграничивать доступ , по хорошему пользователю разрешен только его набор ХП...

Быстрее чем что? SQL запрос всё равно придётся выполнять. И доступ к данным разграничивается на уровне таблиц и даже записей без ХП.

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

ХП позволяют централизовать логику управления записями БД в одном защищённом месте - на сервере.

ХП упрощают разработку программ на языках 3го поколения, когда программисты плохо знают SQL и тем более особенности его реализации на конкретной СУБД.

На SQL невозможно решать ряд задач. ХП позволяют расширять возможности СУБД и SQL.

Из минусов, могу назвать трудности с adhoc запросами.
ХП тоже нужно писать. Т.е. к коду самого SQL запроса добавляется ещё код ХП, который нужно писать, отлаживать и сопровождать.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395228
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне захотелось про недостатки:

ХП зависят от типа и версии СУБД, что практически исключает портирумость проекта

при переносе проекта кроме переноса кода, который может сделать малоквалифицированный специалист, требуется выполнить настройки БД, которые под силу только профессионалу

создание ХП требуют наличия необходимых для этого привилегий

использование ХП усложняет поддержку и развитие проекта за счет переноса части бизнес логики в СУБД, что усложняет архитектуру приложения

языки на которых пишут ХП, зачастую уступают по возможностям "нормальным" языкам программирования

при выполнении кода в ХП сложнее или невозможно лимитировать потребляемые ресурсы
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395268
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,

>>ХП зависят от типа и версии СУБД, что практически исключает портирумость проекта
+1. От версии СУБД зависимость не сильная. Хотя бывали проблемы с тем, что после обновления СУБД часть ХП разваливалась.

>>при переносе проекта кроме переноса кода, который может сделать малоквалифицированный специалист, требуется выполнить настройки БД, которые под силу только профессионалу

Несогласен. Портирование на новую СУБД это всегда сложная задача. ХП скорее упрощают её, потому что логикой транзакций БД занимаются специалисты. В свою очередь разработчики клиентских приложений зачастую слабо знают СУБД и не могут квалифицированно оптимизировать транзакции БД прошитые в коде прилоджения.

>>создание ХП требуют наличия необходимых для этого привилегий

неоднозначное утверждение. я не считаю хорошей практикой разрешать изменение БД кому попало. Так что это скорее достоинство ХП.

>>использование ХП усложняет поддержку и развитие проекта за счет переноса части бизнес логики в СУБД, что усложняет архитектуру приложения

+1. Плохо документированные ХП осложняют их использование в приложениях БД. С другой стороны перенос приложений на новый framework при наличии ХП упрощается, поскольку код транзакций БД не меняется. В общем нужно внимательно относиться к организации процеса разработки.

>>языки на которых пишут ХП, зачастую уступают по возможностям "нормальным" языкам программирования

+1. Есть такое дело. Не всякие сложные вычисления можно эффективно закодировать на языке ХП. Но прогресс в этом направлении есть. В частности некоторые СУБД поддерживют компиляцию ХП или написание ХП на языках 3го поколения.

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

несогласен. ХП пишут так, чтобы рационально использовать ресурсы системы. Возможности лимитирования наверное звисят от конкретной СУБД.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395303
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
>>ХП зависят от типа и версии СУБД, что практически исключает портирумость проекта
+1. От версии СУБД зависимость не сильная. Хотя бывали проблемы с тем, что после обновления СУБД часть ХП разваливалась.
- Вы какую-то конкретную СУБД имеете в виду? Если, как Вы говорите, "часть ХП разваливалась" - это разве не зависимость от версии (про тип понятно - переносимость нулевая)?

mcureenab
>>при переносе проекта кроме переноса кода, который может сделать малоквалифицированный специалист, требуется выполнить настройки БД, которые под силу только профессионалу

Несогласен. Портирование на новую СУБД это всегда сложная задача. ХП скорее упрощают её, потому что логикой транзакций БД занимаются специалисты. В свою очередь разработчики клиентских приложений зачастую слабо знают СУБД и не могут квалифицированно оптимизировать транзакции БД прошитые в коде прилоджения.
- при переносе многих проектов с одной машины на другую (от одного хостера к другому и т. п.) обычно хватает дампа базы. В случае ХП простым дампом обычно не отделаешься. Тезис про разработчиков не понял, так как не ясно какое это имеет отношение к проблемам переноса.

mcureenab
>>создание ХП требуют наличия необходимых для этого привилегий

неоднозначное утверждение. я не считаю хорошей практикой разрешать изменение БД кому попало. Так что это скорее достоинство ХП.
- пример из жизни: человек приносит сайт использующий ХП на хостинг и оказывается что ему нужен более дорогой тарифный план чем он предполагал, так как хостер не дает ему привилегий необходимых для создания и исполнения ХП в рамках shared-хостинга. Человеку однозначно придется переплачивать за использование ХП.


mcureenab
>>использование ХП усложняет поддержку и развитие проекта за счет переноса части бизнес логики в СУБД, что усложняет архитектуру приложения

+1. Плохо документированные ХП осложняют их использование в приложениях БД. С другой стороны перенос приложений на новый framework при наличии ХП упрощается, поскольку код транзакций БД не меняется. В общем нужно внимательно относиться к организации процеса разработки.
- не хочется дискутировать на эту тему устраивая нудный холивар на тему кто должен хранить данные (по моему СУБД), а кто должен их обрабатывать, т. е. где должна находиться бизнес логика (по моему логику надо писать в приложении на нормальном языке программирования). На дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я.

mcureenab
>>языки на которых пишут ХП, зачастую уступают по возможностям "нормальным" языкам программирования

+1. Есть такое дело. Не всякие сложные вычисления можно эффективно закодировать на языке ХП. Но прогресс в этом направлении есть. В частности некоторые СУБД поддерживют компиляцию ХП или написание ХП на языках 3го поколения.
- ага и собственные файловые системы :) Ждем дискуссии на тему "СУБД vs Операционная Система"

mcureenab
>>при выполнении кода в ХП сложнее или невозможно лимитировать потребляемые ресурсы

несогласен. ХП пишут так, чтобы рационально использовать ресурсы системы. Возможности лимитирования наверное звисят от конкретной СУБД.
- прямо все пишут "так, чтобы рационально использовать ресурсы системы"? неужели среди ДБА нет криворуких которые своей ХП положат базу?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395529
н00б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень много буков, но рекомендую прочитать для прояснения вопроса. Комменты доставляют не хуже статьи.
Где наша бизнес-логика, сынок?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395535
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
н00бОчень много буков, но рекомендую прочитать для прояснения вопроса.

Хоть и очень нудное чтиво, но прочитал. Насчет букв - не обманули. Их действительно много. Часто смешных, как например о том, что хранимая процедура должна работать только с одной таблицей. к тому же автор часто (на протяжении всей статьи) путает tier с layer, хотя определение привел сам же, в самом начале.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395569
н00б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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) и по двум же тиерам (тиер веб-сервера и тиер сервера СУБД).

Если я не прав, прошу меня поправить. Мне очень интересен данный вопрос, особенно с учетом другой моей темы , в которую никто не отвечает : - ( .
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395615
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov

На дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я.



Так речь то об SQL vs ХП.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395641
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
н00бПраво же, глупо будет смотреться, когда есть ХП, которая пишет в несколько таблиц, скажем, заносит согласующих и для кадого согласующего в другой таблице выставляет какой-то флга, и _наравне_ с этой ХП есть другая логика.

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


н00бМне очень интересен данный вопрос, особенно с учетом другой моей темы , в которую никто не отвечает : - ( .
лично мне, периодически возникающие эксперименты с "натягиванием" объектов на реляционную структуру совсем не интересны. Возможно, не только мне. Поэтому и не отвечают. В качестве предположения.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395742
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- при переносе многих проектов с одной машины на другую (от одного хостера к другому и т. п.) обычно хватает дампа базы. В случае ХП простым дампом обычно не отделаешься. Тезис про разработчиков не понял, так как не ясно какое это имеет отношение к проблемам переноса.
под простым дампом как я понял почему-то sql дамп подразумивается ? перенос хп не добавит особых проблем к итак существующим, т.к. все равно придется переносить спец утилитами, которые перенесут в том исле и хп. переносить руками глупо т.к. необходимо будет ручками переколбасить типы данных, автоинкрементные->сиквенсы и многое другое. а так утилита и sql диалект подправит, в случае sql дампа придется это руками делать, что опять же не интересно.

Kachalov

- пример из жизни: человек приносит сайт использующий ХП на хостинг и оказывается что ему нужен более дорогой тарифный план чем он предполагал, так как хостер не дает ему привилегий необходимых для создания и исполнения ХП в рамках shared-хостинга. Человеку однозначно придется переплачивать за использование ХП.
странная логика, если если идет о логике, то же это за приложение с логикой что рассматривается вариант хостить на хостинге, да еще и таком левом ? единственное объяснение столь странного поведения хостера - криво установленая субд, а не возможность выдать права побочный эффект кривизны.

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

KachalovНа дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я.

по моему вы так и не поняли о чем они говорили ...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395782
2-х звенщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KachalovНа дворе 21-век, про трехзвенную архитектуру уже давно все сказано более умными и авторитетными людьми чем я.
на SQL.RU они высказывались? Можете дать ссылку, где с примерами дана реализация 3-х звенки, которая не вызовет критики со стороны 2-х звенщиков и заявлениями, что это они сделают и без добавления лишнего звена.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395831
3-х звенщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оглянитесь шире. Трехзвенок полно, практически все крупные информационные системы. А сделать что-то, но в клиент серверной архитектуре,ну наверное можно и что это доказывает? По сабжу: для себя выбрал вариант без ХП (точнее ХП есть, но не на каждый класс. Только вспомогательные вещи, например расчет остатков). Причины:поддержка продуктом нескольких субд, трехзвенка со встроенным в сервер приложений ORM, встроенный дизайнер классов - пользователь может сам добавить атрибуты (в варианте с ХП их пришлось бы как-то менять).
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395877
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-х звенщикМожете дать ссылку
- можете объяснить зачем?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395881
2-х звенщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov2-х звенщикМожете дать ссылку
- можете объяснить зачем?
Да так хочеться повидать живой пример преимущества n-звенок, а то в своё время холивар шел правда в 2 раза меньший, чем про TJ7. И его модераторы тоже прикрыли за отсутствием споров по существу.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395887
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2-х звенщик
на SQL.RU они высказывались? Можете дать ссылку, где с примерами дана реализация 3-х звенки, которая не вызовет критики со стороны 2-х звенщиков и заявлениями, что это они сделают и без добавления лишнего звена.
че-то тут поголовно все путают теплое с мягким. 3-tier совершенно не запрещает помещение бизнес логики в хп ...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395894
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!че-то тут поголовно все путают теплое с мягким. 3-tier совершенно не запрещает помещение бизнес логики в хп ...
- не запрещает, но тогда вопрос "зачем" начинает звучать более остро
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395902
2-х звенщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.! 3-tier совершенно не запрещает помещение бизнес логики в хп ...
А это нигде и не утверждалось. И вообще мы уклоняемся от темы, в ней ничего не спрашивалось об n-звенках. Просто про них зашла речь, вот и не удержался
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395910
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-х звенщикYo.! 3-tier совершенно не запрещает помещение бизнес логики в хп ...
А это нигде и не утверждалось. И вообще мы уклоняемся от темы, в ней ничего не спрашивалось об n-звенках. Просто про них зашла речь, вот и не удержался
нужно себя держать в руках, стараться. К чему бесполезные споры. Нравится с файлами, почтой или обрудованием работать из СУБД - работайте. Свобода выбора!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395920
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- не запрещает, но тогда вопрос "зачем" начинает звучать более остро

(С) анекдот- оператор, до меня не доходят смс сообщения !
- ну это ... прочтите их еще раз ...


повторяю: логика в хп дает более оптимальное использование ресурсов, более надежный код отслеживаемый средствами субд, гораздо менее многословный язык (меньше кода, меньше ошибок)

iscrafm
нужно себя держать в руках, стараться. К чему бесполезные споры. Нравится с файлами, почтой или обрудованием работать из СУБД - работайте. Свобода выбора!
ну если вы привыкли к забиванию гвоздей микроскопом то выбирайте на здоровье, тока чего на здоровых людей при этом кидаться ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395922
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!iscrafm
нужно себя держать в руках, стараться. К чему бесполезные споры. Нравится с файлами, почтой или обрудованием работать из СУБД - работайте. Свобода выбора!
ну если вы привыкли к забиванию гвоздей микроскопом то выбирайте на здоровье, тока чего на здоровых людей при этом кидаться ?
к чему это и кому? какие гвозди и какие микроскопы?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395927
2-х звенщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmк чему это и кому? какие гвозди и какие микроскопы?
это явно фраза не вам.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395928
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm
к чему это и кому? какие гвозди и какие микроскопы?
к тому, что хп предназначены для реализации бизнес логики и если вы отчего-то этим инструменты пытаетесь решать не свойственные инструменту задачи типа работы с оборудованием ...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395929
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!логика в хп дает более оптимальное использование ресурсов
- каких ресурсов? сначала грузите СУБД выполнением ХП, потом мучительно пытаемся масштабировать БД?

Yo.!более надежный код отслеживаемый средствами субд
- видимо в этом месте необходим гипонз, а то что-то не верится

Yo.!гораздо менее многословный язык (меньше кода, меньше ошибок)
- меньше возможностей, язык оторван от ОО парадигмы, невозможность отладки, проблемы с обработкой ошибок, полноценная бизнес логика приводит к созданию процедур монстров, которые трудно читать и т. д. Противопоставлять язык ХП полноценному ЯП - какой-то бред.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395930
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-х звенщикiscrafmк чему это и кому? какие гвозди и какие микроскопы?
это явно фраза не вам.
когда начинается подсчет звеньев, то в адресатах мало кто разбирается, главное чтобы пулемет был под рукой.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395932
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!iscrafm
к чему это и кому? какие гвозди и какие микроскопы?
к тому, что хп предназначены для реализации бизнес логики и если вы отчего-то этим инструменты пытаетесь решать не свойственные инструменту задачи типа работы с оборудованием ...
я пытаюсь? Поручику больше не наливать!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395938
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

давно было написано . Я с тех пор взглядов не менял. Про гвозди и мясорубки думаю там достаточно однозначно сказано.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395940
2-х звенщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KachalovYo.!логика в хп дает более оптимальное использование ресурсов
- каких ресурсов? сначала грузите СУБД выполнением ХП, потом мучительно пытаемся масштабировать БД?

Простите, а если что-то делать не на ХП, а допустим зашиваем этот же запрос в код, она и вправду меньше грузиться ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395950
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- каких ресурсов? сначала грузите СУБД выполнением ХП, потом мучительно пытаемся масштабировать БД?
Network, память, CPU, все это субд может использовать оптимальней за счет того что не нужно гонять копии данных на обработку, а машина хп интегрирована в SQL-машину и есть возможность совместного использования тех же переменных.

Kachalov
- видимо в этом месте необходим гипонз, а то что-то не верится
откройте для архитектуры субд чуть сложнее mysql и тут же обнаружатся плюсы в хп ;)

Kachalov
- меньше возможностей, язык оторван от ОО парадигмы, невозможность отладки, проблемы с обработкой ошибок, полноценная бизнес логика приводит к созданию процедур монстров, которые трудно читать и т. д. Противопоставлять язык ХП полноценному ЯП - какой-то бред.
по мне инструментарий для pl/sql так гораздо удобней особенно в плане обработки исключений и дебага. процедуры монстры получаются там где нет аналога pl/sql пакетов.
ну и главное комедия с натягиванием ООП на реляционные данные с шатанием в крайности от ОО-субд до недо-ОРМов - точно не вершина эволюции.

ЗЫ. ну и для совсем религиозных личностей есть элементы ООП в pl/sql, есть возможность писать хп на полноценном языке (java, .net), но они менее эффективны как в плане скорострельности так и в плане избыточности синтаксиса.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395954
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm
давно было написано . Я с тех пор взглядов не менял. Про гвозди и мясорубки думаю там достаточно однозначно сказано.
странно, я же из вашего поста понял, что вы домыслили за человека то что он будет из хп работать с оборудованием, почтой и файлами.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36395989
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-х звенщикПростите, а если что-то делать не на ХП, а допустим зашиваем этот же запрос в код, она и вправду меньше грузиться ?
- прощаю, любители ХП могут и не знать, но современные сервера приложений легко и дешево масштабируются

Yo.!Network, память, CPU, все это субд может использовать оптимальней за счет того что не нужно гонять копии данных на обработку, а машина хп интегрирована в SQL-машину и есть возможность совместного использования тех же переменных.
- сколько стоит кластеризуемая СУБД и много ли их в принципе? в то время как OpenSource сервера приложений кластеризуются на ура, а платить приходится только за железо :)

Yo.!откройте для архитектуры субд чуть сложнее mysql и тут же обнаружатся плюсы в хп ;)
- перестаньте использовать термин СУБД, так как большинство СУБД явно не соответствует Вашим требованиям к СУБД и опубликуйте оставшийся список из 2-3 БД

Yo.!по мне инструментарий для pl/sql так гораздо удобней особенно в плане обработки исключений и дебага. процедуры монстры получаются там где нет аналога pl/sql пакетов.
ну и главное комедия с натягиванием ООП на реляционные данные с шатанием в крайности от ОО-субд до недо-ОРМов - точно не вершина эволюции.

ЗЫ. ну и для совсем религиозных личностей есть элементы ООП в pl/sql, есть возможность писать хп на полноценном языке (java, .net), но они менее эффективны как в плане скорострельности так и в плане избыточности синтаксиса.
- пожалуйста не используйте термин СУБД вообще и смените свой логин на "Oracle DBA" - так будет честнее, по отношению к тем кто читает Ваш топик и думает что все что Вы пишите относится ко всем базам данных. По существу комментировать не буду, ибо у ДБА своя работа, у программиста своя, главное не забывайте делать ежедневные, недельные, месячные бэкапы и прочую хрень. Успехов.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36396018
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov- сколько стоит кластеризуемая СУБД и много ли их в принципе? в то время как OpenSource сервера приложений кластеризуются на ура, а платить приходится только за железо :)
а что толку от кластеризации апп-сервера ? основная нагрузка субд ложится на SQL движек и ио, процедурное расширения в учетных приложениях дает незначительную нагрузку на фоне SQL.

Yo.!
- перестаньте использовать термин СУБД, так как большинство СУБД явно не соответствует Вашим требованиям к СУБД и опубликуйте оставшийся список из 2-3 БД
я бы ограничил список одной субд - oracle, но к сожалению многие упомянутые вами вещи давно есть и в enterprisedb/postgres, db2 частично mssql ...

Yo.!
- пожалуйста не используйте термин СУБД вообще и смените свой логин на "Oracle DBA" - так будет честнее, по отношению к тем кто читает Ваш топик и думает что все что Вы пишите относится ко всем базам данных. По существу комментировать не буду, ибо у ДБА своя работа, у программиста своя, главное не забывайте делать ежедневные, недельные, месячные бэкапы и прочую хрень. Успехов.
мой логин слишком известен, чтоб его менять
ваши представление о работе дба на уровне ... на не адекватно низком уровне ...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36396106
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
странно, я же из вашего поста понял, что вы домыслили за человека то что он будет из хп работать с оборудованием, почтой и файлами.
Есть два игрока: СУБД и Клиент. Нужно работать с вышеперечисленным. Домыслить не тяжело.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36396119
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!а что толку от кластеризации апп-сервера ? основная нагрузка субд ложится на SQL движек и ио, процедурное расширения в учетных приложениях дает незначительную нагрузку на фоне SQL.
- почитайте побольше о современных серверах приложений, практически все они имеют функционал объектного кэша и объектных транзакций, что позволяет существенно снизить нагрузку на СУБД

Yo.!
я бы ограничил список одной субд - oracle, но к сожалению многие упомянутые вами вещи давно есть и в enterprisedb/postgres, db2 частично mssql ...
- вот об этом я и говорил когда просил не злоупотреблять термином "СУБД" применительно к Вашим представлениям о ХП



Yo.!
ваши представление о работе дба на уровне ... на не адекватно низком уровне ...
- жаль что мой намек остался непонятым, выражусь конкретней: рассуждения ДБА о программировании выглядят примерно также наивно, как рассуждения программиста о администрировании баз данных. Конечно Вы уверены что создаваемые Вами ХП решают все поставленные задачи, однако, поверьте, программирование это целый мир, о котором Вы многое не знаете (без обид, просто констатирую по Вашему посту о возможностях PL/SQL, недостатках ООП и т. д.)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36396803
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- почитайте побольше о современных серверах приложений, практически все они имеют функционал объектного кэша и объектных транзакций, что позволяет существенно снизить нагрузку на СУБД
если бы у бабушки были бы яйца ... (С)
все что сейчас есть в плане интер-транзакционного кеша это или монстроидальная тупиковая ветвь аля ejb или хренотень которая даже acid не обеспечивает. единственно, что сегодня реально используется в индустрии это кеширование мелких справочников на уровне орм, что естественно особо нагрузку с субд не снимает.

Kachalov
- вот об этом я и говорил когда просил не злоупотреблять термином "СУБД" применительно к Вашим представлениям о ХП
простите, но то что вы наговорили о недостатках хп совершенная ерунда сказанная от незнания, в не зависимости от того, что я имел ввиду. тем более, что в отличие от вас именно в этой области у меня знания, а представления (причем ложные как у вас). если пожелаете я могу пройтись с примерами и показать и ООП-языки в хп и обработку исключений в процедурных языках хп, могу показать дебагеры и многое из того о чем вы и не подозревали. мне не лень

Kachalov
- жаль что мой намек остался непонятым, выражусь конкретней: рассуждения ДБА о программировании выглядят примерно также наивно, как рассуждения программиста о администрировании баз данных. Конечно Вы уверены что создаваемые Вами ХП решают все поставленные задачи, однако, поверьте, программирование это целый мир, о котором Вы многое не знаете (без обид, просто констатирую по Вашему посту о возможностях PL/SQL, недостатках ООП и т. д.)
лично я слабо себе представляю как дба может исполнять свои прямые обязанности не разбираясь в архитектуре ПО. выглядит, что у вас сложилось представление о дба как о мальчике который делает бэкапы. ладно, не страшно, с опытом представление изменится.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397120
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm
Есть два игрока: СУБД и Клиент. Нужно работать с вышеперечисленным. Домыслить не тяжело.
а, ну приношу глубочайшие извинения, я не угадал, что вы не только работу с железом из хп домыслили, но и "Есть два игрока"
к стате, откуда эта цифра "два" ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397129
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!iscrafm
Есть два игрока: СУБД и Клиент. Нужно работать с вышеперечисленным. Домыслить не тяжело.
а, ну приношу глубочайшие извинения, я не угадал, что вы не только работу с железом из хп домыслили, но и "Есть два игрока"
к стате, откуда эта цифра "два" ?
возможно у Вас в двухзвенке есть еще какие-то игроки, но я замученных "гатальских" не рассматривал. Речь шла о классических вариантах. Да поддерживать бестолковый флуд "не в тему" не интересно
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397140
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm
возможно у Вас в двухзвенке есть еще какие-то игроки, но я замученных "гатальских" не рассматривал. Речь шла о классических вариантах. Да поддерживать бестолковый флуд "не в тему" не интересно
не пойму откуда вы это берете. где тут двузвенка, два игрока или что-то связанное с этой загадочной цифрой 2, ник что-ли ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397291
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

Вы читаете ни шагу влево, ни шагу вправо? Чуть выше понимаете о чем речь идет?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397294
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть предположение, что один человек под несколькими никами пишет. Вы уж определитесь с одним.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397409
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
лично я слабо себе представляю как дба может исполнять свои прямые обязанности не разбираясь в архитектуре ПО. выглядит, что у вас сложилось представление о дба как о мальчике который делает бэкапы. ладно, не страшно, с опытом представление изменится.
- молю Вас, уточните, стоит ли опасаться что DBA захватят мир?!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397436
Насчет убогости MySQL в плане ХП уже не очень актуально - я делал три года назад ещё на 5.0.х биллинг провайдера - мне уже тогда хватило его возможностей сделать по-человечески логику на СУБД.
К слову сказать с приложениями скажем на Forms\Reports6i чуть более чем знаком был и ранее.
Ну а насчет 3 звенки мне вообще не понятно - зачем этот костыль когда клиент в итоге браузер.
Вы уж тогда проще делайте - пихайте свою 7.7DBF в терминалку - и будет вам счастье трёхзвенное.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397519
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle\MySQL\WEB\Programmer\DBA
Ну а насчет 3 звенки мне вообще не понятно - зачем этот костыль когда клиент в итоге браузер.

мысль настолько глубока, что отпугивает своей темнотой. Но зачетная, для цитатника.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397543
v-eremeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmOracle\MySQL\WEB\Programmer\DBA
Ну а насчет 3 звенки мне вообще не понятно - зачем этот костыль когда клиент в итоге браузер.

мысль настолько глубока, что отпугивает своей темнотой. Но зачетная, для цитатника.
вот неугомонный iscrafm, во всех форумах одновременно. Ты вроде как не приверженец 3-звенок,
чего провоцируешь холивар. Да и здесь не тот форум, чтоб их обсуждать. Забей.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36397572
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v-eremeev
вот неугомонный iscrafm, во всех форумах одновременно. Ты вроде как не приверженец 3-звенок,
чего провоцируешь холивар. Да и здесь не тот форум, чтоб их обсуждать. Забей.
Володя, ты меня перепутал, наверное, с кем-то.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36398050
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!iscrafm
к чему это и кому? какие гвозди и какие микроскопы?
к тому, что хп предназначены для реализации бизнес логики и если вы отчего-то этим инструменты пытаетесь решать не свойственные инструменту задачи типа работы с оборудованием ...

Относитесь к ХП проще. В частности как к средству повышения производительности, когда вместо десятка SQL запросов с кучей сетевых раундтрипов вы один раз вызываете ХП и получаете результат. Естественно, такая ХП должна быть логичной с точки зрения пользователя.

Для небольших систем ВСЯ логига может быть реализована на ХП, а у клиента стоит только Web браузер. Взять тот же Oracle APEX. Многофункциональные СУБД уже давно не экзотика. И я не вижу ничего плохого в том, чтобы покупать одну коробку со всеми необходимыми примочками, которых большинств клиентов хватит до конца дней, а не кучу плохо интегрированных изделий.

К 3х звенке можно относиться так, что она позволяет разместить машину ХП на сервере отдельном от сервера СУБД, тем самым разгрузить сервер СУБД. Правда, у серверов приложений обычно свой язык программирования, который отличается от языка ХП СУБД. Но суть та же - код плотно работающий с БД мы размещаем поближе к БД в защищённом месте, а не у клиента, который может находиться ХЗ где.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36399803
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тему:
/topic/725100&pg=1

Зачем класть яйца в одну корзину (ХП в СУБД)? Разве что для мелких устоявшихся программ. Но для крупных систем - это выращивание неповоротливого монстра с ограниченными возможностями.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36399882
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex S
Зачем класть яйца в одну корзину (ХП в СУБД)? Разве что для мелких устоявшихся программ. Но для крупных систем - это выращивание неповоротливого монстра с ограниченными возможностями.
ну если говорить о твоих яйцах то вообще-то вероятность того, что отвалится одна субд ровно в 2 раза ниже чем отвалиться или субд или апп-сервер
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36400025
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятность отваливания перегруженной СУБД все-таки повыше. А апп-сервера очень легко резервируются. (Все это при прочих равных - т.е. конфигурация СУБД одна и та-же, но в одном случае есть апп-сервера, выполняющие часть работы, а в другом только СУБД)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36400058
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex SВероятность отваливания перегруженной СУБД все-таки повыше. А апп-сервера очень легко резервируются. (Все это при прочих равных - т.е. конфигурация СУБД одна и та-же, но в одном случае есть апп-сервера, выполняющие часть работы, а в другом только СУБД)
с чего бы одинокой субд быть более перегруженой если ресурсов она будет тратить много меньше чем апп сервер+субд+гоняние трафика между апп-сервером и субд ?
от того что ты зарезервируешь апп-сервер субд под апп-сервером надежней одинокой субд не станет. да и резервировать одинокую субд (standby, репликация, лог шипинг) и гонять RO репорты на стендбай не так уж сложно.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36400373
iscrafm
Ты свою семёрку пробовал запихнуть в терминалку?
Нет!?
А ведь это и есть самая прямая трёх звенка для тебя. Лучше ты никогда не сделаешь
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36400439
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle\MySQL\WEB\Programmer\DBA,

ты имеешь виду 7-ку BMW? Или что "свою семерку"?
набор твоей несвязанной речи не понял. А понятие о трехзвенках в образе терминалов - поражает. Где такому только учат?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36401970
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас АгарковСкажите, пожалуйста, в чем плюсы и минусы хранимых процедур? В каких проектах их стоит использовать, а в каких не стоит? Или дайте ссылку, где про это можно почитать.
С учетом названия темы как бы противопосталяются SQL-запросы и ХП.
Хотя последние задумывались как процедурное расширение декларитивного SQL, а не противопоставление, периодически такие вопросы возникают, и в коллетиве разработчиков одного проекта поскольку альтернативы имеют место.
Например, противопоставляется вызов SQL - звапрос из клиентской проги вызову ХП возвращающей курсор.
Действительно, во втором случае типа все SQL оказываются в ХП (а не в клиентском коде), что упрощает доработки, сопровождение, особенно када в проекте много проггеров, и есть четкое разделение между клиентскими проггерами и БД серверными.
Но тут вот возникает частный практический момент, на который бы мне хотелось узнать мыстли коллег(речь о частном случае при использовании компонент доступа клиентских прог, а не общий вопрос):

Компоненты доступа к БД для прог типа Дельфи (ДиректОраклАксцесс) или АПЕКса в случае создания окон редактирования при использовании запросов по умолчанию обеспечивают так называемую оптимистическую блокироку. Т.е. запиманют начальные данные в окне, и перед сохранением проверяют не изменились ли они. Т.е. если два юзера откроют это окно, один внесет исправления и зафиксирует, то второй не сможет внести изменения затерев работу первого. Это просто заложено в компоненты их разработчиками.
Если же вызывается ХП с курсором, то это просто вызов ф-ии и все: компонеты не обеспечивают никакой изоляции.
Меня интересует как решаю это другие:
1)использут ХП возвращающие клиентам куросоры, и сами реализуют изолязацию сессий клиентов. (Оптимистическую блокировку по любому тока на клиенте, писсимистичекая может напряч: вообще второй такое окно не откроет)
2)использут ХП возвращающие клиентам куросоры и забиват на всякие там блокировки: все равно юзер не докажет шо он шо-то вносил, а оно пропало.
3)вызывают запросы из проги, и компоненты берут все скучные весчи на себя.
Это особенно интересно када клиентские проггеры и серверные разные челы: первые мало думают о многопользовательности: им формы бы налобать покрасивше, а вторые не знают че там у них в клиенте вообще делается.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36402291
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
с чего бы одинокой субд быть более перегруженой если ресурсов она будет тратить много меньше чем апп сервер+субд+гоняние трафика между апп-сервером и субд ?
от того что ты зарезервируешь апп-сервер субд под апп-сервером надежней одинокой субд не станет. да и резервировать одинокую субд (standby, репликация, лог шипинг) и гонять RO репорты на стендбай не так уж сложно.Ну, процедурные расширения тоже не святым духом работают, не знаю что займет больше ресурсов: передача результатов одиночного запроса (то что вы называете гонянием трафика) или хранение этого буфера в процессе процедурного расширения - дисковый кеш, блокировки и все такое. Если в первом случае субд отдала данные и свободна, то во втором ? И это на фоне большого количества конкурирующих сессий в субд. Разумеется, что во первом случае уже апп-сервер потребляет ресурсы при обработке данных, и, возможно даже бОльшие - это уж как система построена. Но в таком случае это могут быть ресурсы уже другой машины (машин).
Нередко приходится видеть вообще умопомрачительные вещи, реализованные в субд: типа разбора всяких файловых форматов, всякие парсеры, работа с pipe-ами, портами, отслеживание изменений в дисковых папках, работа с e-mail и т.п. Имхо это совсем не разумное использование ресурсов СУБД. Еще рано или поздно в таких системах появляется парсер формул, реализованный на субд, а то и несколько. А все из-за выбранной архитектуры.
Впрочем, все imho. Мой выбор (апп-сервер(свой) и субд) был сделан 10 лет назад и я не пожалел. Более того, сейчас я вижу много конкурирующих проектов в своей отрасли, переходящих к такой архитектуре. Средства при этом используются различные (покупные j2ee сервера, свои разработки) но движение в сторону n-звеньев есть. Кстати стало проще интегрироваться с такими системами, имеющимися у заказчика - многие стали поддерживать SOAP.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36402588
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex SНо в таком случае это могут быть ресурсы уже другой машины (машин).
тут не понял, хп конечно чудес не сотворит и имея сильно меньше ресурсов конечно большую нагрузку не потянет, но вот с сопоставимыми ресурсами вполне потянет.

Alex S
Нередко приходится видеть вообще умопомрачительные вещи, реализованные в субд: типа разбора всяких файловых форматов, всякие парсеры, работа с pipe-ами, портами, отслеживание изменений в дисковых папках, работа с e-mail и т.п. Имхо это совсем не разумное использование ресурсов СУБД. Еще рано или поздно в таких системах появляется парсер формул, реализованный на субд, а то и несколько. А все из-за выбранной архитектуры.

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

Alex Sно движение в сторону n-звеньев есть.
как-то это движение шибко забуксовало пробежавшись по кругу кидаясь в крайности от извращенному натягивания ООП на реляционный движек до оо-субд до боли напоминают сетевые субд десятый год никак не придя к какому-то вменяемому решению.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36402999
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex SYo.!
с чего бы одинокой субд быть более перегруженой если ресурсов она будет тратить много меньше чем апп сервер+субд+гоняние трафика между апп-сервером и субд ?
от того что ты зарезервируешь апп-сервер субд под апп-сервером надежней одинокой субд не станет. да и резервировать одинокую субд (standby, репликация, лог шипинг) и гонять RO репорты на стендбай не так уж сложно.Ну, процедурные расширения тоже не святым духом работают, не знаю что займет больше ресурсов: передача результатов одиночного запроса (то что вы называете гонянием трафика) или хранение этого буфера в процессе процедурного расширения - дисковый кеш, блокировки и все такое. Если в первом случае субд отдала данные и свободна, то во втором ? И это на фоне большого количества конкурирующих сессий в субд. Разумеется, что во первом случае уже апп-сервер потребляет ресурсы при обработке данных, и, возможно даже бОльшие - это уж как система построена. Но в таком случае это могут быть ресурсы уже другой машины (машин).
Нередко приходится видеть вообще умопомрачительные вещи, реализованные в субд: типа разбора всяких файловых форматов, всякие парсеры, работа с pipe-ами, портами, отслеживание изменений в дисковых папках, работа с e-mail и т.п. Имхо это совсем не разумное использование ресурсов СУБД. Еще рано или поздно в таких системах появляется парсер формул, реализованный на субд, а то и несколько. А все из-за выбранной архитектуры.
Впрочем, все imho. Мой выбор (апп-сервер(свой) и субд) был сделан 10 лет назад и я не пожалел. Более того, сейчас я вижу много конкурирующих проектов в своей отрасли, переходящих к такой архитектуре. Средства при этом используются различные (покупные j2ee сервера, свои разработки) но движение в сторону n-звеньев есть. Кстати стало проще интегрироваться с такими системами, имеющимися у заказчика - многие стали поддерживать SOAP.По-моему, упускается из виду то, что бизнес-логика всё-таки часто должна работать с данными, а средства АПП-сервера работать с данными не умеют.

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

Дополнительно: превозносимая многими возможность разделения системы на сотни дешёвых АПП-серверов объсняется тем-же - приложения не работают с общими данными. Если можно данные в БД разделить на независимые кусочки, тогда и такие БД можно разнести на сотни и тысячи независимых дешёвых СУБД-серверов...

Если взять большие системы с серьёзными АПП-слоями типа SAP, то в них БЛ не перенесена на уровень АПП-сервера, у них некое промежуточное решение: на уровне АПП-сервера сделано фактически только хранилище бизнес-логики.

Т.е. это значит, что БЛ только хранится в АПП-сервере, но выполняется в СУБД.

Это требует очень больших затрат ресурсов на разработку, и компенсируется уменьшением зависимости от разработчика СУБД, что, конечно, важно для компании, затративший на создание системы труд сотен разработчиков (разработчиков в широком смысле) в течении десятков лет.
Бизнес, давая такое задание разработчикам, должен очень серьёзно подумать, за счёт чего и в какие сроки окупится это многократное увеличение затрат ресурсов на разработку.

А вот примеров реализации более-менее сложной (требующей какой-то работы с данными, а не только запросов Key-Value) логики именно в АПП-сервере (и исполняемой именно на АПП-сервере) я не знаю, и нынешние моления на ORM "применять всегда и везде" считаю абсурдными.

И ещё раз хочу заметить (на это уже обращали внимание), что в n-уровневой архитектуре бизнес-логика практически всегда распределяется между уровнями (т.е. нет уровня без бизнес-логики) - собственно, в этом и смысл такой архитектуры. Нужно уж очень сильно искуственно противиться такому разделению, чтоб его не было.

Т.е., ИМХО, правильнеый путь:
- БЛ распределяется по уровням
- на уровене клиента - логика с минимумом сложности и без обращения к данным
- на уровне АПП-сервера - логика с минимумом обращения к данным и с работой с внешними по отношению к СУБД объектами.
- на уровне СУБД-сервера - логика, связанная с работой с данными

Само собой, если логики, связанной с работой с данными нет (а таких приложений немало), то можно использовать и всякие ORM, и использовать СУБД толькло как хранилище.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403266
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Дополнительно: превозносимая многими возможность разделения системы на сотни дешёвых АПП-серверов объсняется тем-же - приложения не работают с общими данными. Если можно данные в БД разделить на независимые кусочки, тогда и такие БД можно разнести на сотни и тысячи независимых дешёвых СУБД-серверов...
- где-то видели работающий пример реализации Вашей идеи распределения логики по многим дешевым СУБД? (интересно почему Вы не использовали модный термин "шардинг"?). Если говорить о кластеризации на уровне Application-сервера, то это реально работает ;)

alexeyvg
Само собой, если логики, связанной с работой с данными нет (а таких приложений немало), то можно использовать и всякие ORM, и использовать СУБД толькло как хранилище.
- улыбнуло. Если я правильно понял последний тезис, то ORM можно использовать там где нет данных? Или я не понимаю что такое "логика, связанная с работой с данными"?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403302
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalovalexeyvg
Дополнительно: превозносимая многими возможность разделения системы на сотни дешёвых АПП-серверов объсняется тем-же - приложения не работают с общими данными. Если можно данные в БД разделить на независимые кусочки, тогда и такие БД можно разнести на сотни и тысячи независимых дешёвых СУБД-серверов...
- где-то видели работающий пример реализации Вашей идеи распределения логики по многим дешевым СУБД? (интересно почему Вы не использовали модный термин "шардинг"?). Если говорить о кластеризации на уровне Application-сервера, то это реально работает ;)Да, видел.

В MySpace использовалось 500 серверов MS SQL Server 2005 (сейчас уже больше)

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

Что дешёвый апп-сервер будет эту тыщу запросов в секунду обрабатывать, что дешёвый субд-сервер - без разницы.

Kachalovalexeyvg
Само собой, если логики, связанной с работой с данными нет (а таких приложений немало), то можно использовать и всякие ORM, и использовать СУБД толькло как хранилище.
- улыбнуло. Если я правильно понял последний тезис, то ORM можно использовать там где нет данных? Или я не понимаю что такое "логика, связанная с работой с данными"?Совершенно верно поняли.

"там где нет данных" - это, конечно не в буквальном смысле абсолютного отсутствия каких либо данных (даже компе в холодильнике работает с данными :-) ), а в смысле хоть какой-то логики работы с данными, кроме работы с одним объектом (считать, показать, изменить, сохранить).

Нормальная работа с данными предполагает, что при чтении или изменении нужно согласовывать состояние объекта с состояниями других объектов, лочить данные (в т.ч. и у других объектов, и в т.ч. при чтении) (не потому, что СУБД лохи написали, а потому, что это нужно для бизнес-логики), делать изменения атомарными, откатывать всё при ошибке и т.п.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403324
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сабж плавно перерос в обсуждение
- 2х или 3-х звенка
и
- БЛ в БД или нет
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403327
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
"там где нет данных"
а зачем данной ИС БД?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403357
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Нормальная работа с данными предполагает, что при чтении или изменении нужно согласовывать состояние объекта с состояниями других объектов, лочить данные (в т.ч. и у других объектов, и в т.ч. при чтении) (не потому, что СУБД лохи написали, а потому, что это нужно для бизнес-логики), делать изменения атомарными, откатывать всё при ошибке и т.п.
- все это есть в современных ORM (распределенные объектные транзакции - это важный элемент спецификации EJB)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403419
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- все это есть в современных ORM (распределенные объектные транзакции - это важный элемент спецификации EJB)
ejb2 - тупиковая монстроидальная ветвь отмершая где-то на рубеже столетий, ejb3 подрихтованный хибер, обычный орм с совершенно не впечатляющими возможностями...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403454
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!ejb2 - тупиковая монстроидальная ветвь отмершая где-то на рубеже столетий, ejb3 подрихтованный хибер, обычный орм с совершенно не впечатляющими возможностями...
- да, ну и ... По делу то есть что сказать? Или секта DBA все еще занята планами порабощения планеты Земля?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403477
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- все это есть в современных ORM (распределенные объектные транзакции - это важный элемент спецификации EJB)Это конечно, так, но вот в чём вопрос - не эффективнее ли транзакции и вообще сложные манипуляции с данными делать на том сервере и на том языке программирования, который для этого и предназначен?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403587
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Измученный праздниками моск не справилсо со столь живой полемикой ни о чем.

1. Как можно противопоставлять ХП и SQL? Естественно, во вменяемой СУБД с вменяемым оптимизатором все, что можно сделать на SQL, надо на нем и делать - оно куда эффективней процедурности. А на современном SQL можно очень много чего. Что никак нельзя - в ХП.
2. ХП и примкнувшие к ним instead of триггеры жизненно необходимы во многих случаях, например для сохранения согласованности при вынужденной денормализации БД их нечем заменить. Их разработка - такая же часть разработки БД, как и DDL.
3. Бизнес-логика, описываемая в терминах РМД, связанная именно и только с данными в БД, естественно должна выполняться в РСУБД и нигде еще, РСУБД для этого и предназначены. Логика (возможно, в терминах ООП), внешняя отн. БД, может (и в серьезном проекте должна) выполняться на апп-сервере. Это нормальное разделение кода между уровнями и разработчиками, все остальное - скорее всего кривое проектирование.
4. ХП позволяют отделить ООП разработчиков от "реляционщиков", что почти всегда оправдано и эффективно, даже если это одни и те же люди :)
5. ОРМы, если и применяются, опять-таки должны работать с вьюхами/ХП, абстрагирующими их от реальной РМД, иначе - это кривое проектирование. Исключение - если проект должен работать на любой СУБД (т.е. эффективно - ни на какой).
6. Естественно, все вышесказанное относится только к РСУБД с действительно эффективной обработкой вьюх/триггеров/ХП, а их, к сожалению, очень немного (этак 2-3, как я понимаю :)).
7. Конечно, в случае СУБД попроще или маленького проекта (особенно улыбнуло про хостинг для СУБД) можно изгаляться как угодно - оно все равно как-то да заработает.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403600
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo

авторКомпоненты доступа к БД для прог типа Дельфи (ДиректОраклАксцесс) или АПЕКса в случае создания окон редактирования при использовании запросов по умолчанию обеспечивают так называемую оптимистическую блокироку.
Т.е. запиманют начальные данные в окне, и перед сохранением проверяют не изменились ли они. Т.е. если два юзера откроют это окно, один внесет исправления и зафиксирует, то второй не сможет внести изменения затерев работу первого. Это просто заложено в компоненты их разработчиками.
Если же вызывается ХП с курсором, то это просто вызов ф-ии и все: компонеты не обеспечивают никакой изоляции.
Меня интересует как решаю это другие:
1)использут ХП возвращающие клиентам куросоры, и сами реализуют изолязацию сессий клиентов. (Оптимистическую блокировку по любому тока на клиенте, писсимистичекая может напряч: вообще второй такое окно не откроет)
2)использут ХП возвращающие клиентам куросоры и забиват на всякие там блокировки: все равно юзер не докажет шо он шо-то вносил, а оно пропало.
3)вызывают запросы из проги, и компоненты берут все скучные весчи на себя.
Это особенно интересно када клиентские проггеры и серверные разные челы: первые мало думают о многопользовательности: им формы бы налобать покрасивше, а вторые не знают че там у них в клиенте вообще делается.

И зачем процедуре возвращать курсор?

А если не возвращать курсор, то не вижу разницы между запросом и хранимой процедурой в этом случае. Так же все заложено в компоненты. В процедуру просто при ее создании передаются начальные данные и измененные и сравниваются. Та же оптимистическая блокировка.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403632
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baike2000И зачем процедуре возвращать курсор?Чтобы сделать из нее параметризованный вью для следующего уровня (клиент/апп-сервер), например.
baike2000А если не возвращать курсор, то не вижу разницы между запросом и хранимой процедурой в этом случае. Так же все заложено в компоненты. В процедуру просто при ее создании передаются начальные данные и измененные и сравниваются. Та же оптимистическая блокировка.Это с какой радости она именно оптимистическая и причем тут компоненты? ХП, за редким исключением, должны жить в рамках внешней транзакции/сессии. И степень изолированности транзакций отнюдь не в ХП задается, это вопрос общего проектирования системы.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36403659
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnЧтобы сделать из нее параметризованный вью для следующего уровня (клиент/апп-сервер), например.
А зачем для этого курсор?
Зачем блокировать таблицу, что бы изменить одну строчку? Или я чего-то не понимаю...

Favn
Это с какой радости она именно оптимистическая и причем тут компоненты? ХП, за редким исключением, должны жить в рамках внешней транзакции/сессии. И степень изолированности транзакций отнюдь не в ХП задается, это вопрос общего проектирования системы.

Вы вопрос читали который задал vadiminfo ?
Вот и спрашивайте у него зачем ему оптимистическая блокировка в компонентах. Я просто сказал, что это реализуется без проблем и с ХП.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36404077
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn7. Конечно, в случае СУБД попроще или маленького проекта (особенно улыбнуло про хостинг для СУБД) можно изгаляться как угодно - оно все равно как-то да заработает.
- блин, ну вот опять, говорите прямо что все что не Oracle, то не СУБД

P.S. Для людей с ограниченным кругозором: хостинг для баз и конкретно на Oracle существует (ради интереса посетите сайт Oracle: тынц )
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36404185
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000

И зачем процедуре возвращать курсор?

Ну в силу того, что курсоры собсно и обеспечивают механизм позволяющий языкам не поддерживающим множество (Дельфи, С, PL/SQL) записей получать данные из языков поддерживающих таковые (SQL). Иначе, SQL должен быть в теле клиентской проге, т.е. посылаться на сервер. Ну, по крайней мере, так в Оракле. Ну и типа в теории как бы.

baike2000
А если не возвращать курсор, то не вижу разницы между запросом и хранимой процедурой в этом случае. Так же все заложено в компоненты. В процедуру просто при ее создании передаются начальные данные и измененные и сравниваются. Та же оптимистическая блокировка.
Мож я не удачно сформулировал? Если запрос, то мне понятно. А если ХП, то что ей передается и что она возвращает, если это не курсор? И в какой язык? Т.е. на чем пишется клиент?
Ну что за СУБД?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405075
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo
Мож я не удачно сформулировал? Если запрос, то мне понятно. А если ХП, то что ей передается и что она возвращает, если это не курсор? И в какой язык? Т.е. на чем пишется клиент?
Ну что за СУБД?

Итак, СУБД - MS SQL, клиент .NET, раньше Visual Basic.
Процедура возвращает набор данных просто. Ну в теле процедуры обычный select col1,col2 from tbl, можно с параметрами в where.
Есть еще процедуры update, insert, delete для одной записи.
Соответственно, если удаляется 100 записей из грида, то сто раз вызывается процедура удаления. И никаких блокировок.

vadiminfo
Ну в силу того, что курсоры собсно и обеспечивают механизм позволяющий языкам не поддерживающим множество (Дельфи, С, PL/SQL) записей получать данные из языков поддерживающих таковые (SQL). Иначе, SQL должен быть в теле клиентской проге, т.е. посылаться на сервер. Ну, по крайней мере, так в Оракле. Ну и типа в теории как бы.

Ну вот с MS SQL я работаю по другому, и уже давно.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405098
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000Итак, СУБД - MS SQL, клиент .NET, раньше Visual Basic.
Процедура возвращает набор данных просто. Ну в теле процедуры обычный select col1,col2 from tbl, можно с параметрами в where.
Есть еще процедуры update, insert, delete для одной записи.
Соответственно, если удаляется 100 записей из грида, то сто раз вызывается процедура удаления. И никаких блокировок.

Ну напиши те плиз простейший пример, чтобы была видна специфакция этого набора в частности.
Ну и как выглядит вызов на клиенте. Язык Васик?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405271
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то ветка запуталась.
Начали с XP vs palin SQL кончили спорами про 2x vs 3x tiers.

imho наличие APP сервере позволяет
1 абстрагироваться от хранения,
2 вынести на него безопасность
3 использовать один и тот же API для разных приложений (например JSP + JAVA для сайта и C++ "толстое приложение")
4 реализовать кеширование для не OLTP данных
5 масштабировать сложные не OLTP расчеты или обработку асинхронных сбор потоковых данных
6 документировать/поддерживать версии методов. В продвинутых APP серверах публикация нового метода будет автоматически исполнятся с нужными зависимостями.

В то же время, XP могут быть своего рода APP Сервером.

Минусы - не решаются пункты 4-5 а из 6 доступно лишь изменение "на ходу". Контроль версий сложен, совмещение версий за пределами транзакций вообще невозможно.

Плюсом APP Сервера на XP является простота языка. Для небольшого проекта достаточно dba и кодера интерфесов/сайта.Можно "на ходу" исправлять бизнес-логику, что доступно лишь на весьма продвинутых серверах приложений (п. 6).

Для небольшого проекта и 2-3 разработчиков 1+2+3 + изменения "на ходу" весьма удобны.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405293
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot tadminПлюсом APP Сервера на XP является простота языка. Для небольшого проекта достаточно dba и кодера интерфесов/сайта.[/quot]
- почему-то вспоминается народная поговорка: "простота - хуже воровства" Сделав "просто", потом получишь воз неразрешимых проблем (решить которые можно двумя способами - либо все полностью переделать, либо, как в каком-то из постов: DBA становится президентом компании и выгоняет всех недовольных разработчиков)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405325
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfobaike2000Итак, СУБД - MS SQL, клиент .NET, раньше Visual Basic.
Процедура возвращает набор данных просто. Ну в теле процедуры обычный select col1,col2 from tbl, можно с параметрами в where.
Есть еще процедуры update, insert, delete для одной записи.
Соответственно, если удаляется 100 записей из грида, то сто раз вызывается процедура удаления. И никаких блокировок.

Ну напиши те плиз простейший пример, чтобы была видна специфакция этого набора в частности.
Ну и как выглядит вызов на клиенте. Язык Васик?

Язык C#. Даже и не знаю что вам показать. Примеров лежит масса в интернете...
Ну вот кусок, правда с пессимистической блокировкой, здесь не надо оптимистическую по логике программы. Но если добавить тех же параметров и написать в них
Код: plaintext
System.Data.DataRowVersion.Original
получится оптимистическая блокировка.

вот определение команд.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
        this.dataAdapter = new System.Data.SqlClient.SqlDataAdapter();

        this.sqlDeleteCommand = new System.Data.SqlClient.SqlCommand();
        this.sqlInsertCommand = new System.Data.SqlClient.SqlCommand();
        this.sqlSelectCommand = new System.Data.SqlClient.SqlCommand();
        this.sqlUpdateCommand = new System.Data.SqlClient.SqlCommand();

        this.dataAdapter.DeleteCommand = this.sqlDeleteCommand;
        this.dataAdapter.InsertCommand = this.sqlInsertCommand;
        this.dataAdapter.SelectCommand = this.sqlSelectCommand;
        this.dataAdapter.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
            new System.Data.Common.DataTableMapping("Table", "ShowIntlMetaCodes", new System.Data.Common.DataColumnMapping[] {
                        new System.Data.Common.DataColumnMapping("META_CODE_NAME", "META_CODE_NAME"),
                        new System.Data.Common.DataColumnMapping("META_CODE", "META_CODE"),
                        new System.Data.Common.DataColumnMapping("COUNTRY", "COUNTRY"),
                        new System.Data.Common.DataColumnMapping("AREA", "AREA"),
                        new System.Data.Common.DataColumnMapping("STATUS", "STATUS"),
                        new System.Data.Common.DataColumnMapping("EFFECTIVE_FROM", "EFFECTIVE_FROM"),
                        new System.Data.Common.DataColumnMapping("ADDED_BY_USER", "ADDED_BY_USER"),
                        new System.Data.Common.DataColumnMapping("CREATION_TIME", "CREATION_TIME")}),
            new System.Data.Common.DataTableMapping("Table1", "Table1", new System.Data.Common.DataColumnMapping[] {
                        new System.Data.Common.DataColumnMapping("META_CODE_NAME", "META_CODE_NAME"),
                        new System.Data.Common.DataColumnMapping("META_CODE", "META_CODE"),
                        new System.Data.Common.DataColumnMapping("COUNTRY", "COUNTRY"),
                        new System.Data.Common.DataColumnMapping("AREA", "AREA"),
                        new System.Data.Common.DataColumnMapping("STATUS", "STATUS"),
                        new System.Data.Common.DataColumnMapping("EFFECTIVE_FROM", "EFFECTIVE_FROM"),
                        new System.Data.Common.DataColumnMapping("ADDED_BY_USER", "ADDED_BY_USER"),
                        new System.Data.Common.DataColumnMapping("CREATION_TIME", "CREATION_TIME")})});
        this.dataAdapter.UpdateCommand = this.sqlUpdateCommand;
        // 
        // sqlDeleteCommand
        // 
        this.sqlDeleteCommand.CommandText = "dbo.IntlMetaCodeDelete";
        this.sqlDeleteCommand.CommandType = System.Data.CommandType.StoredProcedure;
        this.sqlDeleteCommand.Connection = this.connector;
        this.sqlDeleteCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
            new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.ReturnValue, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null),
            new System.Data.SqlClient.SqlParameter("@COUNTRY", System.Data.SqlDbType.NVarChar,  10 , "COUNTRY"),
            new System.Data.SqlClient.SqlParameter("@AREA", System.Data.SqlDbType.NVarChar,  10 , "AREA"),
            new System.Data.SqlClient.SqlParameter("@ReturnCode", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.InputOutput, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null)});
        // 
        // sqlInsertCommand
        // 
        this.sqlInsertCommand.CommandText = "dbo.IntlMetaCodeAdd";
        this.sqlInsertCommand.CommandType = System.Data.CommandType.StoredProcedure;
        this.sqlInsertCommand.Connection = this.connector;
        this.sqlInsertCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
            new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.ReturnValue, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null),
            new System.Data.SqlClient.SqlParameter("@COUNTRY", System.Data.SqlDbType.NVarChar,  10 , "COUNTRY"),
            new System.Data.SqlClient.SqlParameter("@AREA", System.Data.SqlDbType.NVarChar,  10 , "AREA"),
            new System.Data.SqlClient.SqlParameter("@META_CODE_NAME", System.Data.SqlDbType.NVarChar,  40 , "META_CODE_NAME"),
            new System.Data.SqlClient.SqlParameter("@EFFECTIVE_DATE", System.Data.SqlDbType.DateTime,  8 , "EFFECTIVE_FROM"),
            new System.Data.SqlClient.SqlParameter("@IS_INACTIVE", System.Data.SqlDbType.Bit,  1 , "STATUS"),
            new System.Data.SqlClient.SqlParameter("@ReturnCode", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.InputOutput, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null)});
        // 
        // sqlSelectCommand
        // 
        this.sqlSelectCommand.CommandText = "dbo.ShowIntlMetaCodes";
        this.sqlSelectCommand.CommandType = System.Data.CommandType.StoredProcedure;
        this.sqlSelectCommand.Connection = this.connector;
        this.sqlSelectCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
            new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.ReturnValue, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null),
            new System.Data.SqlClient.SqlParameter("@ACTIVE_OLY", System.Data.SqlDbType.Bit,  1 ),
            new System.Data.SqlClient.SqlParameter("@ReturnCode", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.InputOutput, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null)});
        // 
        // sqlUpdateCommand
        // 
        this.sqlUpdateCommand.CommandText = "dbo.IntlMetaCodeAdd";
        this.sqlUpdateCommand.CommandType = System.Data.CommandType.StoredProcedure;
        this.sqlUpdateCommand.Connection = this.connector;
        this.sqlUpdateCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
            new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.ReturnValue, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null),
            new System.Data.SqlClient.SqlParameter("@COUNTRY", System.Data.SqlDbType.NVarChar,  10 , "COUNTRY"),
            new System.Data.SqlClient.SqlParameter("@AREA", System.Data.SqlDbType.NVarChar,  10 , "AREA"),
            new System.Data.SqlClient.SqlParameter("@META_CODE_NAME", System.Data.SqlDbType.NVarChar,  40 , "META_CODE_NAME"),
            new System.Data.SqlClient.SqlParameter("@EFFECTIVE_DATE", System.Data.SqlDbType.DateTime,  8 , "EFFECTIVE_FROM"),
            new System.Data.SqlClient.SqlParameter("@IS_INACTIVE", System.Data.SqlDbType.Bit,  1 , "STATUS"),
            new System.Data.SqlClient.SqlParameter("@ReturnCode", System.Data.SqlDbType.Int,  4 , System.Data.ParameterDirection.InputOutput, false, ((byte)( 0 )), ((byte)( 0 )), "", System.Data.DataRowVersion.Current, null)});


Вот вызов на клиенте dsUpdate - dataSet. Соответственно компонент вызовет update, delete, insert только для именных записей.

Код: plaintext
1.
2.
          if (dsUpdate.HasChanges())
            dataAdapter.Update(dsUpdate, dsName);
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405450
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- почему-то вспоминается народная поговорка: "простота - хуже воровства" Сделав "просто", потом получишь воз неразрешимых проблем (решить которые можно двумя способами - либо все полностью переделать, либо, как в каком-то из постов: DBA становится президентом компании и выгоняет всех недовольных разработчиков)

Эсхатологический прогноз.
Мы пока с этим не столкнулись.
И вообще выбор технологически простых путей не так опасен потребителя, как убыточен для поставщика решений -)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405481
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000,

с писсимстической вопросов то нет: просто for update пишется в SQL, которая в ХП.


А пример этих самых dbo.ShowIntlMetaCodes?
Простой: внутри SQL и было видно, шо за тип она возвращает.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405482
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000
вот определение команд.
Я правильно понимаю, что если бы процедур не было, а просто использовались sql-операторы, то код был бы почти таким же?
Если да, то в чем преимущества процедур для данного случая?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405516
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov- блин, ну вот опять, говорите прямо что все что не Oracle, то не СУБД
Не надо выдирать слова из контекста, тем более что с Оракл я как раз и не работаю. Я в основном работаю с DB2 :) И писал я об эффективной обработке триггеров/вью/ХП в СУБД, а не о качестве СУБД в целом. Хотя... :)
KachalovP.S. Для людей с ограниченным кругозором: хостинг для баз и конкретно на Oracle существует (ради интереса посетите сайт Oracle: тынц )Вот спасибо, кругозор раширился беспредельно! Я и хостинг с DB2 могу указать, речь-то шла о
Kachalovпример из жизни: человек приносит сайт использующий ХП на хостинг и оказывается что ему нужен более дорогой тарифный план чем он предполагал, так как хостер не дает ему привилегий необходимых для создания и исполнения ХП в рамках shared-хостинга.Вы всерьез считаете, что БД сколько-ни серьезной системы может жить мало того что на shared-хостинге, но даже и без прав создания ХП?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405635
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000,

Я не правильно понял Дельфишников. Оказывается дело не в курсоре. А дело в не спользовании ДатаСета. А c ним разницы нет курсор и SQL в ХП или SQL в клиенте. Но все равно спасибо. Просто там использовались другие компоненты. Я наталкнулся на то, шо не работает в одной проге оптимистическая блокировка и решил, это из-за курсоров. А теперь после Вашего ответа опять стал выяснять у них и все прояснилось. Спасибо.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405653
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без курсора (набора данных в табличном виде) в хранимках трудно обойтись.
Например простая процедура

Код: plaintext
1.
2.
3.
4.
5.
ВывестиТаблицуДолжниковЗаДней(дней_параметр) 
begin
......
end


которая возвращает курсор.
ЗЫ. Если БД-импотент, тогда конечно.... можно всё на других слоях писать.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405842
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnВы всерьез считаете, что БД сколько-ни серьезной системы может жить мало того что на shared-хостинге, но даже и без прав создания ХП?
- я считаю что для "серьезной системы" вообще ХП не нужны. Кстати что Вы называете "серьезной системой"? Систему нагруженную большим количеством несложных запросов (OLTP) или малонагруженную систему с большими сложноструктурированными таблицами по которым периодически необходимо строить отчеты (OLAP)? Если мы говорим о web-приложениях (иначе с какого боку тут вообще хостинг?), то очевидно что подавляющее большинство таких систем относится к типу OLTP-приложений, которые прекрасно могут обходиться без ХП и где использование ХП означает скорее архитектурную безграмотность разработчика, а не реальную необходимость.

P.S. про масштабирование и кластеризацию в контексте ХП что-то никто не хочет опонировать :) Вопросы типа: "сколько стоит кластеризуемая БД?" явно оказались неудобными
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405951
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- я считаю что для "серьезной системы" вообще ХП не нужны.
не будьте максималистом.
- как вы реализуете без XP мой запрос выше?
- как насчёт вьюх, триггеров, ключей, каскадов и других средств удобных для разработчика серверной части ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36405969
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
- я считаю что для "серьезной системы" вообще ХП не нужны.
юношеский максимализм, с годами проходит.

KachalovP.S. про масштабирование и кластеризацию в контексте ХП что-то никто не хочет опонировать :) Вопросы типа: "сколько стоит кластеризуемая БД?" явно оказались неудобными
да опонировать собственно нечему. вы с апп-серверами кластерами дел не имели, проблемы возникающие с репликацией кеша того же jboss вам не знакомы. в субд тоже кластера разные бывают, есть shared-nothing c вариантами типа mpp, есть shared-disk кластера, есть in-memory кластера аля mysql. найдите спеца по кластеризации апп-серверов подискутируем.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406098
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123не будьте максималистом.
Yo.!юношеский максимализм, с годами проходит
- для того чтобы вести разумный разговор об использовании ХП, необходимо предварительно определиться с задачей где именно их планируется использовать. Уважаемые пользователи ХП в "серьезных системах", пожалуйста потрудитесь сформулировать что такое "серьезная система", после чего диалог возможно преодолеет детсадовский уровень и обретет подобие смысла. Кстати насчет максимализма - лично я считаю что в OLAP системах использование ХП может иметь смысл (извиняюсь, за то что не хочу с пеной у рта доказывать что ХП это полная фигня, а вот ORM это круто и надо его пихать в любую задницу)

Yo.!вы с апп-серверами кластерами дел не имели, проблемы возникающие с репликацией кеша того же jboss вам не знакомы. найдите спеца по кластеризации апп-серверов подискутируем.
- Вы демонстрируете поразительное знание меня - польщен! Прошу Вас не отвлекаться от задачи захвата планеты Земля и уничтожения всех противников ХП :) Жду не дождусь когда выяснится что сервером приложений Вы называете СУБД.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406124
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- как вы реализуете без XP мой запрос выше?
- честно говоря не уловил о каком запросе шла речь

Petro123- как насчёт вьюх, триггеров, ключей, каскадов и других средств удобных для разработчика серверной части ?
- некоторые вещи не нужны (потому что иначе реализуются или относятся к другим задачам), другие реализованы на программном уровне (уровне сервера приложений). В любом случае, архитектура и средства реализации архитектуры зависят от задачи, в связи с чем говорить ХП/вью/триггер/и т. п. не нужны или нужны бессмысленно. Единственно серьезным из своих постов в данной теме считаю этот пост , все остальное флуд порожденный тупо-агрессивной позицией DBA не желающих изучать что-то кроме возможностей своей БД (другие БД им тоже обычно ненавистны), в связи с чем опасающихся потерять работу из-за приложений где прослойка в виде DBA просто не нужна
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406140
OrlandoRost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
...не желающих изучать что-то кроме возможностей своей БД (другие БД им тоже обычно ненавистны), в связи с чем опасающихся потерять работу... из-за приложений где прослойка в виде DBA просто не нужна

Отличное понимание принципов функционирования рынка!

Kachalov
...прослойка в виде DBA просто не нужна

Тоже посмеялся
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406432
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovtadminПлюсом APP Сервера на XP является простота языка. Для небольшого проекта достаточно dba и кодера интерфесов/сайта.
- почему-то вспоминается народная поговорка: "простота - хуже воровства" Сделав "просто", потом получишь воз неразрешимых проблем (решить которые можно двумя способами - либо все полностью переделать, либо, как в каком-то из постов: DBA становится президентом компании и выгоняет всех недовольных разработчиков)
Насчет простоты языка полностью согласен с tadmin. Еще подчеркну лаконичность конструкций и ненужность сопряжения контекста приложения и контекста РБД (мы работаем все время в контексте РБД). У меня ХП размером в 30 строк обычно заменяет исходный код строк эдак в 100-150 на клиенте. И для себя я давно вывел аксиому фильтра, где должна находиться бизнес-логика : как только код какого-то процесса-расчета (то есть элемента БЛ) на клиенте превышает 5 строк - выношу его на сервер (как вьюшку, триггер, ХП ...). Понятное дело, что с повторно используемым кодом все усложняется - так на то есть как библиотеки классов на клиенте, так и наборы функций на сервере.
Кстати сказать. Есть некоторые исключения из правил (в приятную сторону). В ProgressDB код ХП, код клиентских приложений и код БЛ пишется на одном и том же языке (4GL), и в одном контексте можно объединить все сразу. На этой платформе 3-х звенка стала естественной (и если бы не малая распространенность и связанные с этим некоторые досадные мелочи - завоевала бы мир). Кстати, за то, что здесь на одном языке пишешь все, но в трехуровневой архитектуре, Progress называют "сетевым Foxpro".
Насчет "воза неразрешимых проблем" ... Тут частично согласен с Kachalov. Проблемы сопровождаемости через какое-то время нарастают до, казалось бы, неприличного уровня. Но это связано с периодами изменчивости самого бизнеса. А эта самая изменчивость - величина непостоянная. Пережил месяц головняка, получил премию за внедрение нового БП - и пол-года минимум почиваешь на лаврах занимаешься более приятными вещами занимаешься другими проектами и абсолютно нэ пэрэймаешься "сложной системой" - она живет себе и живет.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406457
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovУважаемые пользователи ХП в "серьезных системах", пожалуйста потрудитесь сформулировать что такое "серьезная система"
"Серьезная система" - это программная система, работающая в режиме 24*7 и обеспечивающая потребности бизнеса, генерирующего годовую добавочную стоимость в размере в 1000 раз больше затрат на создание этой программной системы. В ее составе OLTP-база данных, нагруженная большим количеством сложных и простых запросов, и OLAP-база (необязательно).

Kachalovнеобходимо предварительно определиться с задачей где именно их (ХР) планируется использовать
Дык, это ... определились уже и используем 10 лет как в этих самых "серьезных системах".

Kachalovлично я считаю что в OLAP системах использование ХП может иметь смысл
Гм. А зачем ХП в OLAP-базе ? Кубы дополнять - на то MSIS есть. Интеллектуальный анализ делать ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406501
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strizh"Серьезная система" - это программная система, работающая в режиме 24*7 и обеспечивающая потребности бизнеса, генерирующего годовую добавочную стоимость в размере в 1000 раз больше затрат на создание этой программной системы. В ее составе OLTP-база данных, нагруженная большим количеством сложных и простых запросов, и OLAP-база (необязательно).
- под Ваше определение вполне подходит какой-нибудь успешный web-проект :) Ведь Вы наверняка не это имели в виду а так все четко:

24x7 - не дай бог сайт 5 минут не работает, у хостера начинаются звонки от клиента с угрозами

доб. стоимость в 1000 раз (с какого потолка взяли?) больше стоимости создания - видел проекты по продаже билетов в Интернет с такими показателями, в принципе видел некоторые успешные SEO-проекты которые тоже дают похожую прибыль - тут фишка в том чтобы система не очень дорого стоила, а для веба это характерно.

база данных, нагруженная большим количеством сложных и простых запросов (что-то не так с нормализацией Вашей базы или с архитектурой, тут либо много простых и мало сложных, либо только сложные и все заросло травой с 90-х) - в общем Вы определитесь с OLAP или OLTP, т. е. в специфике системы, но и то и другое есть в web-проектах

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


strizh
Дык, это ... определились уже и используем 10 лет как в этих самых "серьезных системах".
- про "серьезные системы" написал выше. Кстати Вы когда-нибудь видели ТЗ в котором использовался термин "серьезная система"? Скорее всего нет - отсюда вывод "серьезные системы" делают без ТЗ и без документации. Извините за стеб (он адресован не Вам лично), но просто не могу удержаться.

strizh
Гм. А зачем ХП в OLAP-базе ? Кубы дополнять - на то MSIS есть. Интеллектуальный анализ делать ?
- а зачем они в OLTP? выходит что не нужны они нигде?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406654
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey,

Так у меня процедуры на Update и delete не простые все таки. Я ее чуть под редактирую, но все равно вам будет понятно, что на клиенте мне это делать не улыбается.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER procedure [dbo].[IntlMetaCodeDelete] (
 	@COUNTRY nvarchar( 10 ),
 	@AREA nvarchar( 10 ),
 	@ReturnCode int= 0  OUTPUT
 )
 
BEGIN

  SET NOCOUNT ON

  DECLARE @tran int
  DECLARE @procname nvarchar( 200 )
  DECLARE @ModuleItemID int
  DECLARE @retcode int
  DECLARE @Message nvarchar( 100 );
  DECLARE @META_CODE NVARCHAR( 20 );

  
  SET @procname = 'IntlMetaCodeDelete' -- Указать имя текущей процедуры
  SET @ModuleItemID =  3  --'International Codes'
  SET @ReturnCode =  0 
  SET @META_CODE = RTRIM(LTRIM(@COUNTRY))+RTRIM(LTRIM(@AREA))
 
  SET @tran=@@TRANCOUNT

  BEGIN TRY

      
		IF(RTRIM(LTRIM(@AREA)) = '') --if code is base CC
		BEGIN

			/*we should not be deleteing country code*/
			SET @Message = dbo.fn_GetMessage('CountryCodeCanNotBeDeleted')
			RAISERROR (@Message,  16 ,   1 ) WITH SETERROR
		END --IF @AREA = ''
		
		
	declare		@OLD_EFFECTIVE_DATE datetime,
				@CodeHistoryExists bit,
				@MaxDate as datetime
				
	set			@MaxDate = dbo.GET_MAX_DATE()
	
	SELECT top  1 
		@OLD_EFFECTIVE_DATE = DATEADD(SECOND, - 1 , EFFECTIVE_FROM)
		--,@IS_DEACTIVATED = IS_DEACTIVATED
	FROM RepMetaCodes --WITH (NOLOCK)
	WHERE	META_CODE = @META_CODE
			AND EFFECTIVE_FROM = @MaxDate;
			

	IF(@OLD_EFFECTIVE_DATE IS NULL) --there is no code to be deleted, no action to perform
	BEGIN

		SET @Message = dbo.fn_GetMessage('MetaCodeDoesNotExist')
		RAISERROR (@Message,  16 ,   1 ) WITH SETERROR

	END --IF(@OLD_RATE IS NULL)
	
	IF EXISTS --If the historic code info exists
             (	select top  1  META_CODE
				from RepMetaCodes --WITH (NOLOCK)
				where		META_CODE = @META_CODE
							and EFFECTIVE_TO = @OLD_EFFECTIVE_DATE
			)
	BEGIN
		set @CodeHistoryExists =  1 
	END
		ELSE
	BEGIN
		set @CodeHistoryExists =  0 
	END
      
    
      IF @tran= 0  BEGIN TRAN
      
 		SET XACT_ABORT ON;
			
			--TAKE META CODE OUT OF ROUTING IF NO HISTORY AVAILABLE

			IF(@CodeHistoryExists =  0 )
			BEGIN
				--EXEC [dbo].[RoutePlansIntlDeleteCode] @META_CODE = @META_CODE;
				
				DELETE FROM RoutePlansIntlMetaCodes WHERE META_CODE = @META_CODE;
				DELETE FROM RoutePlansIntlMetaCodesQoS WHERE META_CODE = @META_CODE;
				--it may be same as some carrier code, so we'll not delete it here
				--DELETE FROM dbo.RoutePlansIntlCarrierCodesQoS WHERE DIAL_STRING = @META_CODE;
				DELETE FROM GroupedMetaCodes WHERE META_CODE = @META_CODE;
				DELETE FROM RepMetaCodes WHERE META_CODE = @META_CODE;

			END
			
			--ACTIVATE PREVIOUS CODE INFO IN THE TARIFF IF HISTORY EXISTS

			IF(@CodeHistoryExists =  1 )
			BEGIN
			
				DELETE FROM RepMetaCodes
				WHERE 	META_CODE = @META_CODE
						and EFFECTIVE_TO = @MaxDate;
			
				UPDATE RepMetaCodes
				SET	EFFECTIVE_TO = @MaxDate
					--,IS_INACTIVE = @IS_INACTIVE
				WHERE	META_CODE = @META_CODE
						and EFFECTIVE_TO = @OLD_EFFECTIVE_DATE
					
			END
			
	    --SET @ReturnCode = 1 /*SUCCESS*/
	    
      IF @tran= 0  COMMIT TRAN
  END TRY
  BEGIN CATCH
      IF (@@TRANCOUNT >  0  AND @tran= 0 )
         ROLLBACK TRAN;
      ELSE   
         IF ((@@TRANCOUNT >  0 ) AND (XACT_STATE() <> - 1 ))
             ROLLBACK TRAN;

	  IF (@@TRANCOUNT= 0  AND @ReturnCode= 0 ) EXECUTE dbo.uspLogError @procname,@ReturnCode OUTPUT;

      EXEC usp_RethrowError @procname;
      
   END CATCH
 
 END

...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406784
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strizh
И для себя я давно вывел аксиому фильтра, где должна находиться бизнес-логика : как только код какого-то процесса-расчета (то есть элемента БЛ) на клиенте превышает 5 строк - выношу его на сервер (как вьюшку, триггер, ХП ...).
+1

Kachalov
не путайте архитектуру и ТЗ на web-проект и НЕ web-проект.
В том числе сабж (ХП) в web проектах имеет мЕньшее значение.
Так уж исторически сложилось.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406921
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000что на клиенте мне это делать не улыбается."Не улыбается" это что значит? На языке клиента это сделать нельзя? Или это будет существенно сложнее? Ни в то ни в другое я не верю. Или лично вам T-SQL более приятен на вид? О вкусах не спорю, но речь не о вкусах шла, а о преимуществах.
Естественно, что в случаях, когда речь идет об операции включающей некую "бизнес-логику", то появляется вопрос о месте реализации этой логики (в ХП или в другом слое) и в данном случае я ничуть не возражаю против ХП. Но апологеты процедур здесь декларировали какие-то преимущества процедур для абсолютно всех случаев, в том числе и не обремененных бизнес-логикой.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36406953
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreybaike2000что на клиенте мне это делать не улыбается.
....
в том числе и не обремененных бизнес-логикой.
например? Никто такого не говорил.
Я прихожу к такому выводу, что "кто что знает, .... тот там и пишет" :)

IMHO
- БЛ неотрывна от данных
- данные без БЛ никому не нужны
- если данные - РЕЛЯЦИОННЫЕ по своей природе, то где их обрабатывать по бизнесу, если не в БД (рядом с БД :) )
?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407020
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreybaike2000что на клиенте мне это делать не улыбается."Не улыбается" это что значит? На языке клиента это сделать нельзя? Или это будет существенно сложнее?В данном случае на стороне клиента это будет как минимум медленнее работать, т.к. придётся делать внешнее управление транзакциями.

Bogdanov AndreyЕстественно, что в случаях, когда речь идет об операции включающей некую "бизнес-логику", то появляется вопрос о месте реализации этой логики (в ХП или в другом слое) и в данном случае я ничуть не возражаю против ХП.Да, главным образом рассматривается этот случай. В примере baike2000 бизнес логика в хп есть.

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

Другое дело, что нужно оценивать величину этих преимуществ - конечно, процедуры совсем не обязательно использовать всегда.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407040
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123например? Никто такого не говорил.
На этом форуме не раз уже обсуждался подход с использованием CRUD (или SUID) процедур. Можете воспользоваться поиском.
Также предлагаю посмотреть на название топика - оно предполагает, что обсуждаются преимущества (или недостатки) появляющиеся при замене обычных SQL-запросов процедурами. С недостатками мне все ясно, а вот про преимущества я хотел бы услышать, но пока никто ничего вразумительного не сказал.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407087
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyPetro123например? Никто такого не говорил.
На этом форуме не раз уже обсуждался подход с использованием CRUD (или SUID) процедур. Можете воспользоваться поиском.

===== это не имеет отношения к сабжу. Или так скажем, граничный случай (инсерт только через процу). CRUD - разделение на 2 слоя ВНУТРИ БД

Также предлагаю посмотреть на название топика - оно предполагает, что обсуждаются преимущества (или недостатки) появляющиеся при замене обычных SQL-запросов процедурами. С недостатками мне все ясно,

==== мне нет (Я не предлагаю CRUD).

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

==== тебе виднее, всё уже написано


"БЛ - на сервер" - этим всё сказано.
Удачи!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407090
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДа, главным образом рассматривается этот случай. Бессмысленно рассматривать этот случай. SQL - язык для работы с реляционными данными, а не язык для реализации бизнес логики. Глупо говорить о том, что прецедуры имеют преимущества перед SQL, так как позволяют реализовать бизнес-логику. С таким же успехом можно утверждать, что танк лучше мерседеса, так как стрелять умеет. В таких бессымысленных сравнениях я участвовать не буду.

alexeyvgДа, есть и некоторые преимущества процедур для абсолютно всех случаев, которые тут уже описывали. Например, вынесение работы с данными в один слой и разработка этого слоя соотв. специалистами при наличии хп будет удобнее.А нельзя ли поподробнее это преимущество расписать. Что значит "удобнее" и почему?
Мне, например, кажется, что удобнее просто создать таблицу, а потом в соответствующем классе на Java написать четыре SQL-оператора, чем городить еще и промежуточный слой в виде четырех хранимых процедур внутрь которых эти операторы запрятаны.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407096
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 "БЛ - на сервер" - этим всё сказано. Я правильно понимаю, что других преимуществ кроме возможности реализации бизнес-логики у процедур вы привести не можете?
Ну а то, что "сервера" разные бывают и можно реализовать БЛ на сервере бех ХП я говорить не буду.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407156
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyPetro123 "БЛ - на сервер" - этим всё сказано. Я правильно понимаю, что других преимуществ кроме возможности реализации бизнес-логики у процедур вы привести не можете?
Ну а то, что "сервера" разные бывают и можно реализовать БЛ на сервере бех ХП я говорить не буду.
вы не можете понять, что "программист может всё", даже самые бредовые идеи реализовать.

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

"Сложнее всего в мире достигнуть простоты - это крайняя граница опыта и последнее усилие гения".
George Sand.


уж так случилось, что ООП язык клиента и Мира не реализуется в РСУБД.
А хранить НЕпротиворечивые данные - надо.

Приведите пример БЛ, которую лучше решать НЕ на сервере или НА сервере без ХП (ХП тут уже есть)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407189
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123уж так случилось, что ООП язык клиента и Мира не реализуется в РСУБД.
А хранить НЕпротиворечивые данные - надо.

Приведите пример БЛ, которую лучше решать НЕ на сервере или НА сервере без ХП (ХП тут уже есть)
Вы никак не можете понять, что сервера бывают разные. И это не только сервера РСУБД. На некоторых серверах ООП языки вполне себе реализуются.
Но в любом случае все это тема для другого разговора. Я уже писал, что меня не интересуют возможности ХП, как средства реализации бизнес-логики (нормальным ООП-языкам они уступают, но в случае двузвенного приложения других вариантов нет). Я хочу услышать о преимуществах ХП перед SQL-запросами в задаче сохранения/извлечения данных. А вы мне упорно бизнес-логику подсовываете. Есть что сказать кроме бизнес-логики?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407213
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey
Мне, например, кажется, что удобнее просто создать таблицу, а потом в соответствующем классе на Java написать четыре SQL-оператора, чем городить еще и промежуточный слой в виде четырех хранимых процедур внутрь которых эти операторы запрятаны.
К сожалению, удобнее создать, может прийти в противоречие с удобнее сопровождать, дорабатывать. Особенно если клиентские программеры и серверные разные челы. Серверник пишет SQL, передает его клиентисту, тот лезет в код: зависмость клиента от БД. А так во многих случаях на сервере поменял, а клиентисту даже ниче не говорили. Поменять в БД на сервере одно дело, на нескольких клиентах у заказчика другое, тем более удаленно. А представьте, например, ситуацию SQL стал тормозить со временем. Нуно ехать в командировку там оптимизировать. Шо же и еще потом и с клиентистом связываться?
Када сам пишу примеры с клиентами для техпредложений, то пишу SQL в коде клиента, потому шо удобней, быстрей. А када реализуют в промышлненное, то, это удобство, уже вызывает опасения.
Не говоря уже о случаях када, клиенты разные, а SQL общие во многих случаях (логика на серверной части приложения). А если хоть в одном случае это так, то уже из единообразия стиля тада и все так делать надежнее, иначе сопровождение может вызывать значительно больше беспокойства.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407215
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalovбаза данных, нагруженная большим количеством сложных и простых запросов (что-то не так с нормализацией Вашей базы или с архитектурой, тут либо много простых и мало сложных, либо только сложные и все заросло травой с 90-х)
zapros
Код: plaintext
update c_order set delivery_date = '01 20 2010' where ...
eto prostoj zapros ?
Vrode da, a esli po nemu srabatyvaet trigger, delajushij sledujushij shag BP, na kotorom i obnovlenie drugih tablic (pereschet plana dostavki), i posylka uvedomlenij useram ? Vot i poluchaetsya, chto v sistemah s razvitoj BL na XP prostyh zaprosov ne bolshinstvo.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407254
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoА так во многих случаях на сервере поменял, а клиентисту даже ниче не говорили.В подавляющем большинстве случаев все ровно наоборот. В случае с процедурами работы по модификации на порядок больше, и выполняться она должна "согласованнее".
Типовой случай - в работающей системе добавляют колонку в таблицу. Без процедур это добавление спокой проходит, а потом клиенты начинают использовать эту колонку по мере возникновения потребности. В случае с процедурами сразу же вместе с добавлением колонки надо поменять еще и все CRUD-процедуры - у них изменяется интерфейс и это требует пересборки клиентской части (причем всех клиентов, работавших с этими процедурами).
Да, несомненно случаются и такие случаи, когда табличку правят, а интерфейс CRUD-процедур не трогают, но такие случаи вряд ли один процент всех случаев составляют.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407270
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyPetro123уж так случилось, что ООП язык клиента и Мира не реализуется в РСУБД.
А хранить НЕпротиворечивые данные - надо.

Приведите пример БЛ, которую лучше решать НЕ на сервере или НА сервере без ХП (ХП тут уже есть)
Вы никак не можете понять, что сервера бывают разные. И это не только сервера РСУБД. На некоторых серверах ООП языки вполне себе реализуются.

===== на каких? Я пишу как клиента на ЯП-ООП, так и серверную часть на оракле. Однако ОБЪЕКТНО на нём не пишу.
Про ООПБД или ОРСУБД давайте не будем, т.к. OFFTOP

Но в любом случае все это тема для другого разговора. Я уже писал, что меня не интересуют возможности ХП, как средства реализации бизнес-логики (нормальным ООП-языкам они уступают, но в случае двузвенного приложения других вариантов нет). Я хочу услышать о преимуществах ХП перед SQL-запросами в задаче сохранения/извлечения данных. А вы мне упорно бизнес-логику подсовываете. Есть что сказать кроме бизнес-логики?

===== странное желание у Вас - без БЛ ХП не имеют смысла

Типовой случай - в работающей системе добавляют колонку в таблицу

==== что за ИС-калькулятор?. Просто колонку без логики (связей, отчётов, форм) не добавляют
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407298
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123===== на каких?
Ну например на любом J2EE сервере. :)

Petro123странное желание у Вас - без БЛ ХП не имеют смыслаС этим утверждением полностью согласен. Но и разговаривать в таком случае в этом топике (посмотрите на заголовок) не о чем.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407345
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyPetro123===== на каких?
Ну например на любом J2EE сервере. :)

договорились :)
ХП не нужны там, где сервер - импотент - просто хранилище данных.
За непротиворечивость данных с точки зрения бизнеса ОН не отвечает.
За это отвечают 3 дополнительных сервера, слоя, админа и зарплаты.

Я не против этих...других, только решения у них больно дорогие.
Удачи!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407419
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strizheto prostoj zapros ?
Vrode da, a esli po nemu srabatyvaet trigger, delajushij sledujushij shag BP, na kotorom i obnovlenie drugih tablic (pereschet plana dostavki), i posylka uvedomlenij useram ? Vot i poluchaetsya, chto v sistemah s razvitoj BL na XP prostyh zaprosov ne bolshinstvo.
- именно что "не надо делать сложным то что проще простого" C "Нутилус Помпилиус". Отправлять оповещения пользователям с помощью хранимых процедур или триггеров - это типичное извращение, которое должно реализовываться программно, с помощью нормального ЯП в отдельном уровне (предположительно в сервере приложений). На мой взгляд Вы привели пример того как не надо использовать СУБД.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407440
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ХП не нужны там, где сервер - импотент - просто хранилище данных.
- опять новинка в терминологии, теперь "сервера импотенты" (всем добавить в избранное). Извините, но Вас реально трудно понять - о чем конкретно идет речь?!


Petro123Я не против этих...других, только решения у них больно дорогие.
- на сегодняшний день большинство серверов приложений под JavaEE бесплатные или оплачивается только техническая поддержка. Держать на работе DBA который держит всю бизнес-логику системы у себя в голове, тоже небось недешево обходится. Особенно учитывая, что его увольнение автоматически означает полную переделку системы.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407455
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyДа, несомненно случаются и такие случаи, когда табличку правят, а интерфейс CRUD-процедур не трогают, но такие случаи вряд ли один процент всех случаев составляют.
Что-то моя практика, говорит об обратном. У нас полно удаленных клиентов, и случаи када приходится править клиентов не так часто возникают, меньше 10% от всех. Зато када возникают, то геморно. А так нужен тока один серверист, так еще и процедура исправлеия: нужна тока Аська и там, чел который умеет запускать утилиту для команд SQL, PL/SQL. Он тупо копирует из Аськи и все. А это оч просто. Не то шо инсталировать клиентов, да еще на всех компах.
Т.е. использование ХП по полной, и всех SQL в ХП имеет разумные доводы.

Кроме того, када есть разделение на клиентистов и серверистов, то улучшается специализация.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407535
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovPetro123ХП не нужны там, где сервер - импотент - просто хранилище данных.
- опять новинка в терминологии, теперь "сервера импотенты" (всем добавить в избранное). Извините, но Вас реально трудно понять - о чем конкретно идет речь?!

Держать на работе DBA который держит всю бизнес-логику системы у себя в голове, тоже небось недешево обходится. Особенно учитывая, что его увольнение автоматически означает полную переделку системы.
1.
СУБД не импотент - хранить НЕпротиворечивые для бизнеса данные
СУБД импотент - хранить данные (за непротиворечивость отвечает другой)
2.
"держать DBA дорого" :)
чё-то я не понял, это какой уровень системы проектируем?

Вы серьёзно считаете, что решения на J2EE дешевле по стоимости владения?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407564
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
СУБД не импотент - хранить НЕпротиворечивые для бизнеса данные
СУБД импотент - хранить данные (за непротиворечивость отвечает другой)Поздравляю с изобретением новых терминов. Осталось только добиться их мирового признания. :)
Можете также задуматься о том имеют ли эти термины отношение к ХП. Для этого вам придется сильно над определением "непротиворечивости" поработать.
А в остальном мне всегда импонировали экстремистские взгляды. Посему ваш мне тоже нравится. Жаль только, что на практике экстремизм проигрывает более гибким подходам.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407571
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoЧто-то моя практика, говорит об обратном.Если у вас бизнес-логика реализована в СУБД, то так скорее всего и есть. Но я уже говорил, что случай использования ХП для бизнес-логики не собираюсь рассматривать в контексте данного топика.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407632
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey,

у вас портфолио есть?

Я вам привёл свой пример ХП для клиент-сервера 2-х звенки.
Заказчик хочет видеть таблицу должников с параметром вверху-ползунком.
У меня всегда есть шаблоны, библиотеки и комьюнити
http://www.databaseanswers.org/data_models/index.htm
для разработки архитектуры.

Что кроме слова J2EE есть у вас для "простого народа" на пальцах? Или гербалайфом торгуем?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407635
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
СУБД не импотент - хранить НЕпротиворечивые для бизнеса данные
СУБД импотент - хранить данные (за непротиворечивость отвечает другой)

- я бы еще добавил определение:
"система мачо" - СУБД хранит не противоречивые данные (т. е. СУБД не импотент) и бизнес логика вынесена в отдельный уровень (трехзвенка) на котором данные дополнительно проверяются на непротиворечивость при внесении и изменении

Petro123
"держать DBA дорого" :)
чё-то я не понял, это какой уровень системы проектируем?
- я за перенос бизнес логики из ХП в отдельный уровень (трехзвенка) и использование ХП только в тех случаях когда они дают существенное преимущество по производительности

Petro123Вы серьёзно считаете, что решения на J2EE дешевле по стоимости владения?
- смотря что сравнивать и учитывать ли случай когда DBA умер (ну ладно - уволился) и оставил в наследство базу с путаной структурой и кучу недокументированных ХП и триггеров. Также еще раз при таких сравнениях придется определиться с масштабами и назначением системы, а то каждый участник топика под системой подразумевает что-то свое и с нездоровой горячностью доказывает свою правоту собеседникам которые имеют в виду что-то иное.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407654
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov,
"система мачо"
+5 согласен.
ДОПОЛНИТЕЛЬНЫХ уровней может быть много (вместе с клиентскими). Особенно при нескольких серверах в гетерогенной среде.

про 3 звена спорить бессмысленно и лень.
Я надеялся что контекст топика про вынос SQL на клиента
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407677
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
и использование ХП только в тех случаях когда они дают существенное преимущество по производительности

здесь играем (ООП), здесь не играем (процедурные хп), а здесь мы рыбу заворачивали (с)
отличный подход сурьезного шпециалиста
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407684
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyvadiminfoЧто-то моя практика, говорит об обратном.Если у вас бизнес-логика реализована в СУБД, то так скорее всего и есть. Но я уже говорил, что случай использования ХП для бизнес-логики не собираюсь рассматривать в контексте данного топика.
Не вся, наверное, но на распределение логики между сервеной и клиетской частями приложения выше названные соображения могут влиять. Конечно, есть парни, которые хотят налабать клиента независмомго от СУБД. У них другие приоритеты. Я скептически отношусь к этим идеям, но я помню, что я базист, и потому могу относиться к клиентской части предвзято. Потому не настаиваю, а говорю тока об альтернативах, и о преимуществах, которые, мне кажется, стоит учитывать время от времени.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407694
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
во наговорили :)
При небольшом числе клиентов ХП на 1-2 порядка быстрее, т.е вся бизнес логика д.б. в ХП.
При росте числа клиентов нагрузка на сервер БД растет. Когда производительность ХП сравняется с клиентом, пора переносить логику на клиента.
Критичное число клиентов для среднего железа ~ 500-1000
Однако многие системы используют динамические вычисления, и тогда бизнес логика д.б. в ХП однозначно.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407712
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalovя считаю что для "серьезной системы" вообще ХП не нужны. Кстати что Вы называете "серьезной системой"?Все просто - как разработчик (ну совсем не DBA), я достаточно сложной считаю систему, для которой имеет смысл распределять работу хотя бы традиционно на троих :) - БД, апп-сервер, клиент. Тогда каждый кусок есть черный ящик для остальных, и своя логика, от остальных независимая, есть в каждом.
И при нормальном проектировании тогда логика обработки, формализуемая в реляционных терминах, естественно живет внутри СУБД, объектная - внутри апп-сервера. И противопоставлять их друг другу - просто бред.

Kachalovто очевидно что подавляющее большинство таких систем относится к типу OLTP-приложений, которые прекрасно могут обходиться без ХП и где использование ХП означает скорее архитектурную безграмотность разработчика, а не реальную необходимость.Безграмотностью разработчика в любых системах является нежелание разбивать систему на части с описанными интерфейсами между ними. Использование ХП - возможно, не лучший (не самый понятный) интерфейс между БД и апп-сервером, но может быть с успехом заменен на те же вью с триггерами, внутри которых - те же ХП. Тогда и любимые всеми (но по-разному:) ) ОРМы думают, что работают с БД, и разработчик БД в своей части делает все, что считает нужным.

KachalovP.S. про масштабирование и кластеризацию в контексте ХП что-то никто не хочет опонировать :) Вопросы типа: "сколько стоит кластеризуемая БД?" явно оказались неудобными Не смешите людей - кластеризация апп-серевера, распараллеливающия обработку логики и кластеризациция БД, распараллеливающия обработку сверхбольших массивов данных - это совершенно разные (и не сключающе друг друга) задачи, противопоставлять их нельзя. И если появилась нечастая необходимость кластеризации именно БД, то стоимость СУБД будет очень небольшим довеском к стоимости железа.

Еще раз не о "плюсах", а о необходимости логики в БД:
1. Все, что можно сделать на чистом SQL - надо на нем и делать, процедурная обработка данных - зло . Параллелизм внутри запроса не может заменить никакая процедура, где бы она не находилась, как и оптимизацию этого запроса на основании актуальных данных (статистики).
Естественно, писать многостраничные запросы, как и следить за целостностью модели в БД может только специалист в конкретной СУБД, эту БД проектирующий, и выносить все это за рамки БД - бред. Эту логику надо маскировать для использования в следующих уровнях обработки (апп-сервер, например) с помощью вью и/или ХП (в зависимости от СУБД), формируя для этих уровней интерфейс к БД.
2. Все, что нельзя сделать декларативно, но что касается только и именно обработки в рамках реляционной модели - лучше делать внутри БД, она это сделает гораздо эффективнее. Что, опять-таки, позволит разделить логические уровни при проектировании.
3. Внешние отн. реляционной модели задачи естественно могут (и как правило должны) решаться вне СУБД, на следующих уровнях.

P.S. С моей точки зрения - данный спор ни о чем, каждый инструмент должен решать свойственные именно ему задачи. И раскидать задачи проекта по соответствующим инструментам есть прямая обязанность проектировщика системы.
P.P.S. А ХП именно вместо запросов (а не вместе с ними), т.е. замена декларативного SQL на процедурную обработку - зло безусловное.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407752
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey,

Что-то мне непонятны отличия при добавлении колонки в таблицу?

Bogdanov AndreyТиповой случай - в работающей системе добавляют колонку в таблицу. Без процедур это добавление спокой проходит, а потом клиенты начинают использовать эту колонку по мере возникновения потребности. В случае с процедурами сразу же вместе с добавлением колонки надо поменять еще и все CRUD-процедуры - у них изменяется интерфейс и это требует пересборки клиентской части (причем всех клиентов, работавших с этими процедурами).

Какая разница в обновлении клиента и сервера при использовании процедур или без использования? Изменилась таблица - значит поменялась логика, а это значит надо обновить и сервер и клиента и среднее звено. Или не так? Или я что-то пропустил?

Bogdanov AndreyВ случае с процедурами сразу же вместе с добавлением колонки надо поменять еще и все CRUD-процедуры - у них изменяется интерфейс и это требует пересборки клиентской части (причем всех клиентов, работавших с этими процедурами).

Если задуматься, то он изменится хоть применяешь, хоть не применяешь процедуры...
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407767
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baike2000Или я что-то пропустил?

Пропустили: он как раз выдвигал довод, что придется менять и там. Это я говорил, что менять достаточно буит тока на сервере во многих слуях на практике, если все SQL в ХП.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407782
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfobaike2000Или я что-то пропустил?

Пропустили: он как раз выдвигал довод, что придется менять и там. Это я говорил, что менять достаточно буит тока на сервере во многих слуях на практике, если все SQL в ХП.

С этим я очень даже согласен.

Ну я говорю именно про колонку в таблице.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407797
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn
P.P.S. А ХП именно вместо запросов (а не вместе с ними), т.е. замена декларативного SQL на процедурную обработку - зло безусловное.
вы наверно имели ввиду клинику вроде:
вместо
Код: plaintext
SELECT AAAAAA
или
Код: plaintext
UPDATE AAAAAA

процедурно циклом

Код: plaintext
1.
2.
3.
4.
procedure XP_BBBB
begin
   for cursor in (SELECT AAAAAA) loop
  пробежаться по записям....
end
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407869
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Kachalov
и использование ХП только в тех случаях когда они дают существенное преимущество по производительности

здесь играем (ООП), здесь не играем (процедурные хп), а здесь мы рыбу заворачивали (с)
отличный подход сурьезного шпециалиста
- специалист это не осел и не баран (для которых характерна позиция - "вот так и никак иначе"), он должен видеть весь спектр возможностей и выбирать наиболее эффективные варианты. Вопрос в том что в конкретном случае значит "эффективный"?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36407919
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnKachalovя считаю что для "серьезной системы" вообще ХП не нужны. Кстати что Вы называете "серьезной системой"?Все просто - как разработчик (ну совсем не DBA), я достаточно сложной считаю систему ...
- ага, теперь кроме "серьезных систем" всплыли еще какие-то "достаточно сложные системы" Ну Вы хоть читайте что пишите.


Favn
И при нормальном проектировании тогда логика обработки, формализуемая в реляционных терминах, естественно живет внутри СУБД, объектная - внутри апп-сервера. И противопоставлять их друг другу - просто бред.
- просто бред не понимать что пользователю нужны данные в удобной форме и, если 20 лет назад, таблично реляционная форма представления была достаточно удобной, то по мере усложнения решаемых бизнес задач объектное представление данных стало более естественным для описания данных имеющих большое количество и иерархию связей. Поскольку РСУБД это историческая данность, ООП - это жизненная необходимость, возникает потребность в объектно реляционном маппинге, при использовании которого вполне естественно осуществлять обработку данных в объектном виде, хотя, в некоторых случаях выполнение логики на РСУБД может оказаться более эффективным.

Извиняюсь, устал ... и некогда. Засим временно откланяюсь, хотя Ваш топик благодатный для трепа.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408032
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
просто бред не понимать что пользователю нужны данные в удобной форме и, если 20 лет назад, таблично реляционная форма представления была достаточно удобной, то по мере усложнения решаемых бизнес задач объектное представление данных стало более естественным для описания данных имеющих большое количество и иерархию связей. Поскольку РСУБД это историческая данность, ООП - это жизненная необходимость, возникает потребность в объектно реляционном маппинге, при использовании которого вполне естественно осуществлять обработку данных в объектном виде, хотя, в некоторых случаях выполнение логики на РСУБД может оказаться более эффективным.

- представление не зависит от данных, и уж тем более от логики

- потребность в коммунизме, ООСУБД и искусственном интелекте уже давно назрела
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408087
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123вы наверно имели ввиду клинику вроде...Нет, клиника совсем в другом. Если вместо сложного MERGE в процедуре появляется кучка циклов с update-курсорами и промежуточными массивами, или вместо SELECT с with-выражениями и window-функциями появляются те же циклы с курсорами, "процедура", где бы она не находилась, становится источником проблем. И ХП с вью, по-моему, нужны в первую очередь для изоляции сложного SQL-кода от разработчиков, не владеющих мощным современным SQL. Да, в общем, и не дОлжных владеть.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408124
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn,
да, это проблема.
Просто ум заточенный на ООП часто плохо воспринимает реляционную алгебру и наоборот.
Много зависит от профи-разработчика БД. Даже в бОльшей степени, чем от клиентщика (он всё более-более тонкий и презентационно-витринный).
а так, если в общем, то плохой синтаксис-стиль есть везде :)
http://www.govnokod.ru/delphi
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408126
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov- ага, теперь кроме "серьезных систем" всплыли еще какие-то "достаточно сложные системы" Ну Вы хоть читайте что пишите.Да, между "сложными" и "серьезными" - в данном контексте просто огромная лингвистическая разница :). Еще раз - и то, и другое - с точки зрения проектирования и разработки.
Kachalov- просто бред не понимать что пользователю нужны данные в удобной форме и, если 20 лет назад, таблично реляционная форма представления была достаточно удобной, то по мере усложнения решаемых бизнес задач объектное представление данных стало более естественным для описания данных имеющих большое количество и иерархию связей. Кстате, о бреде - пользователь-то тут причем? Он у Вас процедуры вызывает или на SQL пишет? Вид данных, получаемых пользователем, к серверному коду вообще никакого отношения не имеет.
Если используется РСУБД - БД должна проектироваться в терминах РМД, и ее данные должны обрабатываться в рамках этой модели. А все, что работает с БД, может использовать любую другую модель абстракции, уже на своем уровне. Нормально спроектированная БД - это не набор таблиц, а законченный уровень абстракции с описанными интерфейсами для работы с ним, черный ящик.
KachalovПоскольку РСУБД это историческая данность, ООП - это жизненная необходимость, возникает потребность в объектно реляционном маппинге, при использовании которого вполне естественно осуществлять обработку данных в объектном виде, хотя, в некоторых случаях выполнение логики на РСУБД может оказаться более эффективным.Я где-то с этим спорил? Не замечал. Просто отдавать объектному уровню хоть в апп-сервере, хоть на клиенте "сырые" таблицы вместо вью и процедур - крайне опасный во всех смыслах подход. Хотя и самый простой (примитивный).
Kachalovхотя, в некоторых случаях выполнение логики на РСУБД может оказаться более эффективным.Если эта логика описана в рамках РМД - всегда. Еще раз - каждый инструмент должен решать свои задачи.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408151
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Просто ум заточенный на ООП часто плохо воспринимает реляционную алгебру и наоборот. Много зависит от профи-разработчика БД.Я думаю, что это скорее нежелание (лень) изучить. В конце концов, логика предикатов и работа с множествами - общие и одинаково нужны для любого программирования. Другое дело, что ООП-разработчику хорошее знание SQL может быть и не нужно, если он работает с БД через продуманный интерфейс.
И даже если РСУБД и ООП разработчик - одно лицо, в грамотном проектировании это мало что меняет.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408882
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovПоскольку РСУБД это историческая данность, ООП - это жизненная необходимостьНу, это просто заклинание. Могу сказать, что РСУБД это жизненная необходимость, ООП - это историческая данность. При этом я могу всё таки представить некую доказательную базу, а не просто голое утверждение.

Kachalov- просто бред не понимать что пользователю нужны данные в удобной форме и, если 20 лет назад, таблично реляционная форма представления была достаточно удобной, то по мере усложнения решаемых бизнес задач объектное представление данных стало более естественным для описания данных имеющих большое количество и иерархию связей.По моему, вы не совсем верно представляете разницу ролей в современном мире между ООП-языками и платформами и РСУБД.

Реляционные данные (РД) - это актив компании, это большая доля из того, что она стоит, а иногда и всё, что она стоит.

Причём "реляционные данные" - это независит от того, есть-ли у компании РСУБД или даже вообще компьютеры. Просто есть массивы множеств данных, между которыми есть связи по значениям атрибутов.
Очень важно здесь то, что РД появляются и становятся активом компании без инициации какого-либо программирования, создания объектной модели, и т.д., важно лишь позаботиться об их сохранении и эффективном использовании.
РД - это естественно и первично. При проектировании, например, ООП-приложения делают маппинг сущностей на объекты, а не наоборот.

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

Как следует из всего этого, период использования ООП при работе с РСУБД - это просто короткий период применения удобной и продуктивной ООП-технологии при работе с РД; соответственно, важно понимать, что является первичным, а что вторичным, и не ставить программирование вперёд данных .

Возвращаясь к вопросу - где реализовывать логику:

Разумеется, никто не против применения АПП-серверов и ООП, на нынешнем этапе, когда используются ООП-языки для разработки пользовательских приложений.

Однако вполне логично работать с РД в их максимально нативном хранилище - РСУБД. Это хотя бы делает вложения максимально долгоиграющими, это позволяет поддерживать общий пул РД и БЛ.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36408987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
с точки зрения практика, со всем согласен.
с точки зрения теоретика,
авторПричём "реляционные данные" - это независит от того, есть-ли у компании РСУБД или даже вообще компьютеры. Просто есть массивы множеств данных, между которыми есть связи по значениям атрибутов.
почему в активах лежат реляционные, когда природа их объектна ?
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36409306
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123alexeyvg,
с точки зрения практика, со всем согласен.
с точки зрения теоретика,
авторПричём "реляционные данные" - это независит от того, есть-ли у компании РСУБД или даже вообще компьютеры. Просто есть массивы множеств данных, между которыми есть связи по значениям атрибутов.
почему в активах лежат реляционные, когда природа их объектна ?Разумеется, мир состоит из объектов.

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

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

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

Для примера - Книга Продаж, налоговые уведомления, списки названий и контактов клиентов у сейлов (конечно, у каждого в своём формате, в т.ч. и в памяти), Книги кадрового учёта.
Конечно, Книга Продаж (бумажная) - это объект, но работа с ней как с объектами - это плодить сущности сверх необходимого :-)

Что-то из этого есть в компах, причём возможно даже в виде объектов на АПП-серверах. Но эти софтовые объекты появились позже, вторичны, и возможно, неполно и/или искажённо отражают реальные объекты окружающего мира и реляционное представление этого мира.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36409398
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
спасибо за интересные мысли.
Хотя я считаю, что человек изначально НЕ мыслит реляционно.
Просто при переложении информации в комп и структуировании её требуется упрощённая реляционная модель.
До объектного ПО и СУБД ещё далеко , но ОН будет...... :)
Удачи!
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36409453
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123alexeyvg,
спасибо за интересные мысли.
Хотя я считаю, что человек изначально НЕ мыслит реляционно.
Просто при переложении информации в комп и структуировании её требуется упрощённая реляционная модель.
До объектного ПО и СУБД ещё далеко , но ОН будет...... :)
Удачи!Ну да, наверное, с реляционностью мышления я погорячился - просто я сам работаю с РСУБД :-)

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

"До объектного ПО и СУБД ещё далеко , ОН будет" - с этим я согласен, но нужно хотя бы увести ООП от программирования - это ключевой и абсолютно необходимый момент.

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

Т.е. нужна теоретическая база и станлдарты, чего для ОБД пока нет.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36409490
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Разумеется, мир состоит из объектов.
...
Я просто актентировал внимание на то, что та информация, которая есть в наличии у компаний и которая их актив, всё таки больше в реляционном виде. Нельзя представить работу с имеющейся бумажной Книгой Продаж изначально как с объектом, но можно как с записями и атрибутами. И только после этого этапа можно сделать программный объект.

Kachalovпользователю нужны данные в удобной форме и, если 20 лет назад, таблично реляционная форма представления была достаточно удобной, то по мере усложнения решаемых бизнес задач объектное представление данных стало более естественным для описания данных имеющих большое количество и иерархию связей. Поскольку РСУБД это историческая данность, ООП - это жизненная необходимость

- собственно и я говорил примерно о том же ;)

alexeyvgНо я считаю, что люди не могут воспринимать объекты как объекты. Они упрощают их до множеств и атрибутов.
- очень люблю на лекциях вспоминать пример из жизни: как-то услышал разговор женщин между собой, где одна женщина говорила другой - "у меня, у мужа, на работе ..." ни дальше про работу мужа. Такие безграмотные с точки зрения русского языка конструкции можно часто услышать. По моему это доказательство того что люди мыслят объектно или как минимум используют структуры :)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36410297
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
[у меня].[у мужа].[на работе].
)
в ООБД так и сделано
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411161
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Kachalov
[у меня].[у мужа].[на работе].
)
в ООБД так и сделано
Пик ожиданий связанных с ООБД, скорее всего, прошел не менее 10 лет. Счас спад ожиданий. Второй волны пока не видно. Так что, возможно, вспоминать сейчас об ей либо слишком поздно, либо слишком рано.
Мапировать объекты на реляционные таблы, тоже выглядит больше как двойная работа (сначало проектироваль РБД, потом еще и классы), двойные риски: плохо спроектировали и то и другое, а выигрышь не вседа очевиден. Все же для типовых задач пошли по пути, в котором ООП занимаются производители Сишарпов, Дельфей, Васиков лабая библиотеки классов с датасетами, адаптеров. Видимо, пока это и есть наибольший успех ООП, а не доморщенное лобание объектов предметной области. Ить плохо спректровнную ОО модель исправлять сложно, а хорошую налабать сложгновато буит. А выигрышь в случае успеха может быть не значителен.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411180
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoМапировать объекты на реляционные таблы, тоже выглядит больше как двойная работа (сначало проектироваль РБД, потом еще и классы), двойные риски: плохо спроектировали и то и другое, а выигрышь не вседа очевиден.
- проблема не в двойной работе, а в том что часть работы уже сделана :( У большинства заказчиков информационных систем (ИС) существенного масштаба уже есть данные хранимые в РСУБД (часто в совершенно диком виде) и к этим данным написано некоторое количество софта, который частично планируется заменить новой ИС, а часть софта заказчик считает удовлетворяющей его потребности и отказываться от нее не желает. Короче - вариант "все с нуля" не пройдет. В итоге и приходится сопрягать разрабатываемую ИС (использующую ООП) с тем слабо документированным "авгием" который скопился у заказчика (ХП, триггеры, криво спроектированные таблицы и т. п.). Отсюда и сложный объектно-реляционный маппинг и ненависть к тем кто все это сотворил (они тоже зачастую заложники ситуации)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411451
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- проблема не в двойной работе, а в том что часть работы уже сделана :( У большинства заказчиков информационных систем (ИС) существенного масштаба уже есть данные хранимые в РСУБД (часто в совершенно диком виде) и к этим данным написано некоторое количество софта, который частично планируется заменить новой ИС, а часть софта заказчик считает удовлетворяющей его потребности и отказываться от нее не желает. Короче - вариант "все с нуля" не пройдет. В итоге и приходится сопрягать разрабатываемую ИС (использующую ООП) с тем слабо документированным "авгием" который скопился у заказчика (ХП, триггеры, криво спроектированные таблицы и т. п.). Отсюда и сложный объектно-реляционный маппинг и ненависть к тем кто все это сотворил (они тоже зачастую заложники ситуации)
Возможно, проблем значительно больше, так что и в случае варианта "с нуля" в настоящее время без применения РСУБД содержит риски в плане дипрессии программного обеспечения. Т.е. пока все выглядит так, что там где РМД не адекватна, и другие подходы абсолютно не реляционные (никак не использующие реляционные подходы) не достаточно адекватны. А там где РМД адекватна другие все так же не достаточно адекватны. А это многие типовые среди информационного обеспечения задачи. А без вытеснения РСУБД в типовых задачах, новые подходы имеют много рисков заглохнуть в любой момент. Как следствие попытки поиска решений с сохранением всего полезного от РМД, т.е. расширения оной, включая, например, ОРМД.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411477
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повторюсь, я за научную фантастику, но ООБД даже на научную не тянет. Тока на популярную.
Это в принципе, как колесо, которого нет в природе. Ну и ещё маркетинг производителей (поддерка наследования и классов в Оракле)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411494
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123повторюсь, я за научную фантастику, но ООБД даже на научную не тянет. Тока на популярную.
Это в принципе, как колесо, которого нет в природе. Ну и ещё маркетинг производителей (поддерка наследования и классов в Оракле)
В Оракле не ООБД, а ОРБД. Это две существенные разницы так как эти подходы противопоставляются друг другу: первый начисто отрицает РМД, второй есть расширение оной.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411595
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoТ.е. пока все выглядит так, что там где РМД не адекватна, и другие подходы абсолютно не реляционные (никак не использующие реляционные подходы) не достаточно адекватны. А там где РМД адекватна другие все так же не достаточно адекватны.
- ну если РМД адекватна задаче построения на ней объектной модели, то и объектно-реляционный маппинг делается легко и работает хорошо, а если нет, то и маппинг делать сложно и производительность теряется :)
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411664
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovvadiminfoТ.е. пока все выглядит так, что там где РМД не адекватна, и другие подходы абсолютно не реляционные (никак не использующие реляционные подходы) не достаточно адекватны. А там где РМД адекватна другие все так же не достаточно адекватны.
- ну если РМД адекватна задаче построения на ней объектной модели, то и объектно-реляционный маппинг делается легко и работает хорошо, а если нет, то и маппинг делать сложно и производительность теряется :)
IMHO
плюс РМД в построении МД.
Это соблюдение законов моделирования предметной области.
Его основного закона - УПРОЩЕНИЕ модели реального мира.

Без этого, все классы и сущности, которые пришли в голову прикладнику-клиентщику, были бы в хранилище данных компании.
Скульптор (архитектор БД) только отсекает всё лишнее.
И РМД только помогает в этом.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411693
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfo
Пик ожиданий связанных с ООБД, скорее всего, прошел не менее 10 лет. Счас спад ожиданий. Второй волны пока не видно. Так что, возможно, вспоминать сейчас об ей либо слишком поздно, либо слишком рано.
уже начались метания и в подходе к ООП, переболев оосубдами и ормами начинается движение в сторону LINQ в котором ООП вообще не проглядывается.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36411739
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123IMHO
плюс РМД в построении МД.
Это соблюдение законов моделирования предметной области.
Его основного закона - УПРОЩЕНИЕ модели реального мира.

Одним из существенных плюсов РМД является манипулирование данными в этой МД, которая обеспечивает "УПРОЩЕНИЕ" получения информации о реальном мире. А получение таковой есть "основная" цель создания ИС. Можно придумать какие угодно по выразительности МД, но если манипулирование остается сложным, то это сводит все достоинства на нет. Реальный мир - самая содержательная БД, но извлеч нужную инфу сложно. Числами легко манипулировать, но описать сложно предметну область. Т.е. имеет значение оптимум. И РМД пока наииболее опртимальна в этом плане. Шобы ея отменить нуно найти шо-то более оптимальное.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36482132
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Alex SВероятность отваливания перегруженной СУБД все-таки повыше. А апп-сервера очень легко резервируются. (Все это при прочих равных - т.е. конфигурация СУБД одна и та-же, но в одном случае есть апп-сервера, выполняющие часть работы, а в другом только СУБД)
с чего бы одинокой субд быть более перегруженой если ресурсов она будет тратить много меньше чем апп сервер+субд+гоняние трафика между апп-сервером и субд ?
от того что ты зарезервируешь апп-сервер субд под апп-сервером надежней одинокой субд не станет. да и резервировать одинокую субд (standby, репликация, лог шипинг) и гонять RO репорты на стендбай не так уж сложно.

Слушайте, я вот почитал ваши и его высказывания. У вас совершенно разный уровень технической подготовки. Вы абсолютно правильно привели все аргументы, что ХП гораздо выгоднее. Такое ощущение, что вам просто нравится спорить. Прошу вас, оставьте человека в покое, если он не внемлет ничего из написаного. Тема превращается в банальный флейм.
...
Рейтинг: 0 / 0
Хранимые процедуры против обычных SQL-запросов
    #36482141
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxТема превращается в банальный флейм.
тема уже месяц как потухла. Зачем поднимать банальным флеймом банальный флейм.
...
Рейтинг: 0 / 0
151 сообщений из 151, показаны все 7 страниц
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Хранимые процедуры против обычных SQL-запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]