Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ORM vs PL/SQL, логика в БД или в приложении 
:(
    Опции темы
gcc
Дата 15.11.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



Цитата(Zloxa @ 12.11.2010,  20:06)
Я правильно припоминаю что некоторые ОРМ кэшируют данные и, если данные были модифицированы мимо этих ОРМ, они теряют согласованность?

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


а если широко использовать memcached, то тоже будет не большая не согласованность? 
можно часть логики бд написать, например, на PL/Perl в PostgreSQL и там управлять  memcached... ? smile

Это сообщение отредактировал(а) gcc - 15.11.2010, 14:08
PM WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 15.11.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Zloxa @  15.11.2010,  12:45 Найти цитируемый пост)
Я имел в виду то, что согласованность этих трех составляющих обеспечивается лишь организационно, жестких связей нет, и в условиях недостаточной организованности(бардака, присущего многим) никогда нельзя поручиться в соответствии исполняемого кода исходному, в соответствии весии БД исполняемому.

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

А так - насчёт "надёжности" базы. Если действительно бардак - то можно ж и на проде что-нибудь поменять, что потом фиг поймёшь как посинкать. Да или просто не сразу найдёшь (какой-нить тригер на неочевидной табличке, другие констрейнты и вообще схема базы уже совсем другая). Бардака надо просто избегать. Ну опять-таки - тут зависит, наверно, от конкретной организации и конкретных девелоперов оч многое..


--------------------
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 15.11.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



Цитата(Любитель @  15.11.2010,  15:10 Найти цитируемый пост)
Бардака надо просто избегать

Я не спорю, просто одно дело когда недопущение бардака обеспечивается огранизационно, регламентом - административно, и совсем  другое дело, когда это же обеспечивается технически, платформой.
Цитата(Любитель @  15.11.2010,  15:10 Найти цитируемый пост)
Ну опять-таки - тут зависит, наверно, от конкретной организации и конкретных девелоперов оч многое.. 

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


Это сообщение отредактировал(а) Zloxa - 15.11.2010, 15:46


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Любитель
Дата 15.11.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Zloxa @  15.11.2010,  15:27 Найти цитируемый пост)
Я не спорю, просто одно дело когда недопущение бардака обеспечивается огранизационно, регламентом - административно, и совсем  другое дело, когда это же обеспечивается технически, платформой.

Отсутствие бардака возможно только при одном истинно вреном источнике (иначе денормализация получается smile) - сорс контроле. А так - база всё равно не одна. Допустим, что скрипты для базы не заливаются в сорс контроль. Девелопер1 разрабатывает новую фичу, расширяет какую-нибудь хранимку (добавляет к ней какие-то возможности/параметры и т. д.). Девелопер2 фиксит багу на проде - меняет туж хранимку. Если всё это делается "напрямую в базе", то смёржить это нормально потом нельзя (не, ну можно, конечно, но гораздо сложнее по сравнению с нормальной организацией: всё через сорс контроль).

Проблема возможности правки кода в обход сорс контроля не SQL-специфична. Это относится и к любым некомпилируемым языкам - тоже можно "побыстрей поправить баг" и не залить в сорс контроль.

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


--------------------
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 15.11.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



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

Был у нас проектик. Его внедрили и сопровождали одни оутсорсеры. Все этапы велись честно. С багртрекером, описаловом всех модификаций, публикацией на сервере контроля версий. Затем они сдали все дела другим оутсорсерам. Сдали честно, всем пакетом документации, консультации и иже с ними. Те нас тоже очень долго оутсорсиили и тоже все по чесноку. Мировые бестпракстис и вся фигня. Дальше от тех аутсорсеров решили отказаться в пользу инхауса. Те сдали дела честно. С примерами, инструкциями, мегабайтами документации и переписок, архивом того, что они получили от предыдущего аутсорсера. Первая попытка самостоятельной модификации одной из форм уперлась в то, что исходник формы, забранный из папочки, где должен бы лежать последний актуальный - тупо не компилится, версия исходника не соответствует версии бинарника. Ктото, когдато отступил от регламента... и поди разбери кто. И то повезло что не скомпилился, было бы хуже если бы скомпилился, но работал не так как след. А экземпляров этой формы всего найдено всего шесть. Вдумчивым анализом из шести удалось выбрать одну, наиболее похожую на правду.
Организационно? конечно это все решается. Но разгребать в конце концов все равно технарям приходится. Жаль что и отгребать тоже. 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Любитель
Дата 15.11.2010, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Zloxa @  15.11.2010,  17:28 Найти цитируемый пост)
Любитель, проблема конкурентой модификации одного и того же исходного кода это таки одна проблема и возникает она на одном этапе жизненного цикла продукта. А проблема поиска актуального исходного кода - совсем другая, и возникает совсем на другом этапе.

Что-т я всё-таки не пойму. При наличии цетнрального репозитория (в случае DVCS всё равно какой-т репозиторий считают "главным") проблемы быть не должно. Или я что-т не так думаю (а вообще, наверно, мы слишком отвлеклись от темы - всё-таки организация рабочего процесса далеко не самый главный фактор).

Цитата(Zloxa @  15.11.2010,  17:28 Найти цитируемый пост)
Первая попытка самостоятельной модификации одной из форм уперлась в то, что исходник формы, забранный из папочки, где должен бы лежать последний актуальный - тупо не компилится, версия исходника не соответствует версии бинарника

Ну это неправильно поставленный рабочий процесс. Билды для деплоя должны идти только через билд скрипт (с CI сервера вообще говоря). Если кто-т "собрал вручную" - это плохо. Как бороться - не знаю. На моей практике такие проблемы если и были, быстро решались. И повторно человек на теж грабли пытается не наступать.

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


--------------------
PM MAIL ICQ Skype   Вверх
LSD
Дата 17.11.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Почему не стоит пихать логику в СУБД:
1. Размазывание логики - часть логики будет репрезентативном слое, часть в СУБД. Плюс не совсем понятны зоны ответственности серверов.
2. Тот же PL/SQL или TSQL плохо подходят для реализации действительно больших модулей, да и количество фрейморков под эти языки исчезающе мало. С Java/C# ситуация лучше, но тут тоже есть свои проблемы. Вот у нас например используется Оракл 10, а Java там версии 1.4, и до современной 1.6 ее никак не обновишь. Плюс например тот же Spring не заведется под Ораклом. Куча проблем с деплойментом приложения.
3. Кэширование эффективно не сделаешь.
4. Чтобы увеличить производительность надо докупать лицензии на СУБД, а учитывая сколько стоят процессорные лицензии, то лучше не надо. А если и этого будет мало, то тут придется гемороится с организацией кластера СУБД.


Цитата(Zloxa @  11.11.2010,  12:25 Найти цитируемый пост)
Это исключительно маркетинговая фишка. Любой вменяемый технический специалист будет отбрыкиваться всеми доступными ему средствами от желаний маркетологов скрестить лопату с микроскопом. Средства обеспечения согласованности данных в MS SQL и Оракле настолько различны, что технарю придется забрать на себя львиную долю забот, которые можно было бы возложить на СУБД. Когда этот довод звучит из уст технаря, я недоумеваю.

Ну не надо, 99% целостности обеспечивается 3 типами констрейнов: NOT NULL, FK, UNIQUE, и перенести их в другую базу не составит труда.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 17.11.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



Цитата(LSD @  17.11.2010,  13:13 Найти цитируемый пост)
99% целостности

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

Приведенными тобой средствами обеспечения целостности, как ты можешь обеспечить условие, что если документ сохранен, то он отражен в остатках?

Основное же средство обеспечения согласованности - реализация изоляции транзакций, в MS и Orаcle столь разнятся, что для универсализации разрабу придется забирать этот функционал на себя. А задача эта весьма и весьма не тривиальная, особенно если учитывать требование универсализации. Приложение, где не надо, не должно вставать на блокировках по чтению на MS SQL, а на оракле, наоборот, должно встать, где надо. Именно это, прежде всего, я и имел в виду. 

Цитата(LSD @  17.11.2010,  13:13 Найти цитируемый пост)
1. Размазывание логики - часть логики будет репрезентативном слое, часть в СУБД. Плюс не совсем понятны зоны ответственности серверов.

Я очень долго размышлял над этим. Действительно долго.
Скажем документ, сохраняясь в системе должен соответствовать неким требованиям. В случае реализации этой логики на стороне бд, бд должна не допускать сохранение документа, если он противоречит требованиям, потому клиенту придется дублировать часть этой логики при контроле ввода. Но дублировать не суть - размазывать. Логика реализуется в одном месте - в базе, клиент, проверяя логику, обеспечивает прежде всего свою стабильность, если для него критично поймать исключение при сохранении результата, если он не может то исключения сколь нибудь удобоваримо обработать.
Цитата(LSD @  17.11.2010,  13:13 Найти цитируемый пост)
2. Тот же PL/SQL или TSQL плохо подходят для реализации действительно больших модулей,

Про TSQL - не спорю.
PL/SQL.... Я уже упоминал что встречался лишь единожды, когда использования жавы было обусловлено сложностью задачи а не предпочтением разработчкика. То был модуль реализации pop3 протокола. 
Тут я действительно не совсем понимаю о чем ты.
Цитата(LSD @  17.11.2010,  13:13 Найти цитируемый пост)
3.

Цитата(LSD @  17.11.2010,  13:13 Найти цитируемый пост)
4. 

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 24.11.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(Zloxa @  17.11.2010,  15:18 Найти цитируемый пост)
Приведенными тобой средствами обеспечения целостности, как ты можешь обеспечить условие, что если документ сохранен, то он отражен в остатках?

Никак. Но в приведенном мной сценарии (3-х звенка), подобные вещи делаются средним звеном и на особенности СУБД никак не завязаны. А те 3 типа констрейнов что я упомянул нужны исключительно для избежания проблем при конкурентном доступе.



Цитата(Zloxa @  17.11.2010,  15:18 Найти цитируемый пост)
Основное же средство обеспечения согласованности - реализация изоляции транзакций, в MS и Orаcle столь разнятся, что для универсализации разрабу придется забирать этот функционал на себя. А задача эта весьма и весьма не тривиальная, особенно если учитывать требование универсализации. Приложение, где не надо, не должно вставать на блокировках по чтению на MS SQL, а на оракле, наоборот, должно встать, где надо. Именно это, прежде всего, я и имел в виду.

ИМХО ты все излишне усложняешь. Если использовать селекты которые выбирают маленькие наборы данных и короткие транзакции, то задержки на блокировках будет минимальны и не будут создавать проблем.



Цитата(Zloxa @  17.11.2010,  15:18 Найти цитируемый пост)
Скажем документ, сохраняясь в системе должен соответствовать неким требованиям. В случае реализации этой логики на стороне бд, бд должна не допускать сохранение документа, если он противоречит требованиям, потому клиенту придется дублировать часть этой логики при контроле ввода. Но дублировать не суть - размазывать. Логика реализуется в одном месте - в базе, клиент, проверяя логику, обеспечивает прежде всего свою стабильность, если для него критично поймать исключение при сохранении результата, если он не может то исключения сколь нибудь удобоваримо обработать.

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



Цитата(Zloxa @  17.11.2010,  15:18 Найти цитируемый пост)
PL/SQL.... Я уже упоминал что встречался лишь единожды, когда использования жавы было обусловлено сложностью задачи а не предпочтением разработчкика. То был модуль реализации pop3 протокола. 

Достаточно просто сравнить количество различных средств рефакторинга для PL/SQL и Java smile Я уж не упоминаю про количество всевозможных библиотек и всяких инфраструктурных вещей, типа юнит и интеграционных тестов, средств сборки и анализа кода.



Цитата(Zloxa @  17.11.2010,  15:18 Найти цитируемый пост)
Не мог бы ты привести пример на пальцах? 

Приведу, но чуть попозже.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 24.11.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



Цитата(LSD @  24.11.2010,  14:48 Найти цитируемый пост)
ИМХО ты все излишне усложняешь. Если использовать селекты которые выбирают маленькие наборы данных и короткие транзакции, то задержки на блокировках будет минимальны и не будут создавать проблем.

Ну да. И если мы будем закладываться на возможность конкурентного доступа к объектам системы, то нам придется самостоятельно обеспечивать изоляцию. В том же примере про документ, который не должен быть сохранен в случае ошибочного оформления, мы ведь должны как то учитывать что в процессе проверки и до момента его сохранения состояние и критерии не были изменены конкурирующим процессом. Потому нам придется средствами приложения раскидывать блокировки - забирать на себя реализацию изоляции транзакций. О чем я и толкую.
Цитата(LSD @  24.11.2010,  14:48 Найти цитируемый пост)
 Вытаскивать из того же SQLException код ошибки и пытаться понять по нему, что пошло не так - то еще удовольствие. 

Да, и я ж о том и говорю. Потому часть логики приходится дублировать. Но это дублирование - не размазывание.
Цитата(LSD @  24.11.2010,  14:48 Найти цитируемый пост)
Достаточно просто сравнить количество различных средств рефакторинга для PL/SQL и Java  Я уж не упоминаю про количество всевозможных библиотек и всяких инфраструктурных вещей, типа юнит и интеграционных тестов, средств сборки и анализа кода.

Тут палка о двух концах. Я, конечно, не совсем в теме. Особо не копал, но что нарыл, то нарыл. В жавьем концепте, простейшее уточнение структуры данных, как правило требует модификации  бинов, зачастую - куда более одного. Желание производить эти рутинные операции автоматически вполне оправдано, потому жава и обросла огромнейшим арсеналом средств рефакторинга.
Что же касается различных наборов библиотек.... я уже упоминал что 99,9% прикладной логики энтерпайза - выбрать данные и сохранить результат. Мне действительно не доводилось встечаться с потребностью в обилии библиотек. И я уже упоминал, если прикладная логика имеет действительно сложную алгоритмику, ее вынос на выделенный сервер приложений вполне обоснована. Но я уже пять лет автоматизирую процессы предприятия и мне все еще такая логика не встретилась. Хотя, право же, действительно хотелось бы обосновать необходимость реализации прикладного слоя на жаве и получить новые компетенции.

Еще с одним недостатком реализации логики средствами приложения мне доводилось сталкиваться. Приходили к нам парни, крупные международники, внедряли крупную, дорогую, систему, интегрировали ее с прочим ###м, что у нас имеет место крутиться. Получилось так, что за интеграцию с разными модулями отвечали разные команды, а единый прикладной слой толи не был выделен, толи инструментарий не позволял его использовать(жава+формс). В результате получилось что в одну таблицу, разными интерфейсами сливаются документы из разных систем. И в каждом интерфейсе реализуется логика. И в некоторых она была реализована по разному. В результате мы получили систему, в которой не обеспечена согласованность данных. Данные о транзакциях не соответствуют данным об остатках, потому как документы одного типа были отражены в остатках разными способами. Вынос прикладной логики на сторону бд, позволил бы избежать этой ситуации. Если же реализовывать средствами апп.... Думаю, вполне можно было бы создать некий жава класс, который реализовывал бы эту самую необходимую логику, однако я не уверен что работать с ним было бы проще нежели работать с таблицей и не уверен, что его можно было бы сколь нибудь просто использовать из формсов, и так же не уверен, что нам бы не пришлось таки дублировать часть логики при работе с этим классом, дабы потом не анализировать уже не SQL, а java exception.

Добавлено через 6 минут и 53 секунды
Цитата(LSD @  24.11.2010,  14:48 Найти цитируемый пост)
Приведу, но чуть попозже. 

заранее благодарен smile

Это сообщение отредактировал(а) Zloxa - 24.11.2010, 15:46


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 24.11.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(Zloxa @  24.11.2010,  16:41 Найти цитируемый пост)
Ну да. И если мы будем закладываться на возможность конкурентного доступа к объектам системы, то нам придется самостоятельно обеспечивать изоляцию. В том же примере про документ, который не должен быть сохранен в случае ошибочного оформления, мы ведь должны как то учитывать что в процессе проверки и до момента его сохранения состояние и критерии не были изменены конкурирующим процессом. Потому нам придется средствами приложения раскидывать блокировки - забирать на себя реализацию изоляции транзакций. О чем я и толкую.

1. Блокировки можно возложить на ORM, если мы хотим их делать на уровне СУБД.
2. Можно использовать версионирование (средствами того же ORM) и обойтись вообще без блокировок.
3. Для совсем "запущенных" случаев, никто не отменяет блокировки на уровне сервера приложений.
4. Или даже сделать небольшой СУБД зависимый модуль. В любом лучше переписать один маленький модуль, не представляет большой проблемы.
Хотя лично мне в моих приложениях всегда хватало commit/rollback. Пару раз приходилось использовать блокировки на уровне ORM и версионирование.


Цитата(Zloxa @  24.11.2010,  16:41 Найти цитируемый пост)
Потому часть логики приходится дублировать. Но это дублирование - не размазывание.

Ну а теперь смотри: у нас есть логика проверки согласованности данных в слое представления и точно такая же в СУБД. Профит в том чтобы держать ее и там и там я вижу только один: если какая-то сволочь залезет в базу напрямую, то данные все равно будут согласованны. Но мы же понимаем, что кроме DBA никто так делать не будет. Зато мы получаем необходимость держать эти две реализации логики проверки в согласованном состоянии.


Цитата(Zloxa @  24.11.2010,  16:41 Найти цитируемый пост)
Тут палка о двух концах. Я, конечно, не совсем в теме. Особо не копал, но что нарыл, то нарыл. В жавьем концепте, простейшее уточнение структуры данных, как правило требует модификации  бинов, зачастую - куда более одного. Желание производить эти рутинные операции автоматически вполне оправдано, потому жава и обросла огромнейшим арсеналом средств рефакторинга.

Тут дело не только в переименовании, там еще куча всего типа выделить из класса интерфейс и заменить использование класса на использование интерфейса, заменить непосредственное создание на фабрику, окружить блок try/catch-ем и т.д. И это касается не только Java для C# тоже рефакторинг весьма богатый: IDEA RefactoringsReSharper Refactorings. К тому же рефакторинг это не единственная фишка, там есть и анализ кода на лету, т.е. в той же IDEA мне не нужно запускать компиляцию, чтобы узнать что у меня в коде есть синтаксические ошибки. Интеллектуальный поиск по коду (find usage, call hierarchy и т.д.). Автоматическая генерация кода.



Цитата(Zloxa @  24.11.2010,  16:41 Найти цитируемый пост)
Что же касается различных наборов библиотек.... я уже упоминал что 99,9% прикладной логики энтерпайза - выбрать данные и сохранить результат. Мне действительно не доводилось встечаться с потребностью в обилии библиотек. И я уже упоминал, если прикладная логика имеет действительно сложную алгоритмику, ее вынос на выделенный сервер приложений вполне обоснована. Но я уже пять лет автоматизирую процессы предприятия и мне все еще такая логика не встретилась. Хотя, право же, действительно хотелось бы обосновать необходимость реализации прикладного слоя на жаве и получить новые компетенции.

Я не говорю что их надо много, но часто бывают специфические требования типа работа с SCP, связь с другой системой через SOAP и т.д. Ну и плюс всякие мелкие утилитки, типа логгирования, коллекций и т.д.
И еще я говорил про утилиты для build lifecycle, как-то сборка, тестирование, деплой, что может предложить PL/SQL?



Цитата(Zloxa @  24.11.2010,  16:41 Найти цитируемый пост)
Еще с одним недостатком реализации логики средствами приложения мне доводилось сталкиваться. <....>

Это частный случай неудачной реализации. А представь в какую позу встала бы база, если бы эти альтернативно одаренные внедренцы попытались бы засунуть логику в СУБД (каждый свою собственную) smile 


P.S. Предлагаю тестик реализовать проверку корректности Номера банковской карты на PL/SQL и Java соответственно, номер приходит как строка.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 4.12.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



Готов поменять свое мнение.

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

Мне необходимо локализовать проблему. Пытаюсь трассировать этот процесс. Открыаю фронт прикладухи, готовлю объект, запускаю скрипт, который переводит все активные сессии в режим трассировки и взводит триггер на онлогон, включающий трассировку для новых сессий. Нажимаю педаль утвердить, жду пару секунд, получаю респонз от от апп, подтверждающий отсутствие провтиворечий, отключаю трассировку. На сервере я один. Лезу в трассы... вижу там 25(!!!) многомегабайтных файлов трассировки. Т.е. в этом процессе поучаствовали 25 сессий. Пулл коннектов - браво! Это же просто шикарно. Я уже на эту задачу убил 10 часов, результат пока 0. Если я таки локализую эту проблему, я на ней столько бабла подниму - жена уже пакует чемоданы на Кипр. Если бы были не правильно выбраны технологии, я на задачу потратил бы от силы 2-4 часа.
Цитата(LSD @  24.11.2010,  19:18 Найти цитируемый пост)
P.S. Предлагаю тестик реализовать проверку корректности Номера банковской карты на PL/SQL и Java соответственно, номер приходит как строка. 

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

Мы ЕАНы чекаем PL/SQLем. Чтобы эта процедура когда нибудь оказывалась узким местом - не могу припомнить.

Это сообщение отредактировал(а) Zloxa - 4.12.2010, 18:42


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 6.12.2010, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(Zloxa @  4.12.2010,  17:14 Найти цитируемый пост)
Быть может я недооценил стоимость этотго алгоритма, но чтото мне подсказывает что прирост производительности от реализации его на ява, будет не особо заметен на фоне накладных расходов, необходимых для сохранения этого номера в базе данных.

Мы ЕАНы чекаем PL/SQLем. Чтобы эта процедура когда нибудь оказывалась узким местом - не могу припомнить.

Я не про производительность. Просто мне кажется, что на PL/SQL код будет более громоздким. Во всяком случае когда я пытался нечто подобное реализовать на PL/SQL то код получился довольно громоздким.



По поводу привести пару примеров:
Цитата(LSD @  17.11.2010,  14:13 Найти цитируемый пост)
3. Кэширование эффективно не сделаешь.

Если у нас 3-х звенка то выбор стратегий кеширования достаточно широк: 
а) можно просто полагаться на кеш базы
б) можно перед СУБД поставить кеширующие сервера (например Memcached), причем их количество можно безболезнено наращивать
в) можно внутри приложения использовать собственное кеширование загруженных данных и результатов вычислений
г) можно делать кеширование данных для клиентов (например сгенерированных HTML)
Если же у нас сервер приложений отвечает только за результат, то остается только а) и г). Пункт б) выпадает по понятным причинам, в) же нельзя использовать потому что не имея в слое представления бизнес логики, нет возможности корректно инвалидировать данные в кеше.
Приведу пример: есть система управления правами типа Oracle Entitlements Server, у нас есть юзер, права и роли. Чаще всего нам будет нужно для пользователя получить список его прав и проверить, есть ли у него право на некое действие/объект, так что кешировать связку человек-права вполне стоит. А теперь представь, что мы в роль добавляем еще одно право. Нам надо как минимум инвалидировать закешированные для некоторых пользователей права, а еще лучше перевычислить их. Если у нас бизнес логика в сервере приложений, то проблем нет, мы знаем как это сделать. А вот если она в СУБД, то тут уже придется помучится.




Цитата(LSD @  17.11.2010,  14:13 Найти цитируемый пост)
4. Чтобы увеличить производительность надо докупать лицензии на СУБД, а учитывая сколько стоят процессорные лицензии, то лучше не надо. А если и этого будет мало, то тут придется гемороится с организацией кластера СУБД.

Большая часть запросов к системе идет на чтение и читающие запросы достаточно легко распараллеливаются. Поднимаем 10 бесплатных Томкатов, ставим перед ними балансировщик, поднять стендбай и у нас готово дешевое решение. А если бы мы попытались тоже самое реализовать с Ораклом, нам пришлось бы купить лицензию на Oracle RAC, потратится на SAN для RAC, ну и конечно поднять 10 Томкатов smile (слой представления никуда же не делся).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 7.12.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



LSD, спасибо за интересный ответ по существу. Определенно это материал для раздумий.

Из того, что приходит в голову на вскидку, без глубоких размышлений:
Цитата(LSD @  6.12.2010,  20:32 Найти цитируемый пост)
 в) же нельзя использовать потому что не имея в слое представления бизнес логики, нет возможности корректно инвалидировать данные в кеше. 

Бд может поднять алерт, по которому приложение будет сбрасывать кэш.

Цитата(LSD @  6.12.2010,  20:32 Найти цитируемый пост)
 Поднимаем 10 бесплатных Томкатов, ставим перед ними балансировщик, поднять стендбай и у нас готово дешевое решение.

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

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 7.12.2010, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(Zloxa @  7.12.2010,  12:38 Найти цитируемый пост)
Хм.. но писать же в стендбай - нельзя. Хотя, наверное можно как то выкрутиться, чтобы запись производилась в мастербазу.

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


Цитата(Zloxa @  7.12.2010,  12:38 Найти цитируемый пост)
Бд может поднять алерт, по которому приложение будет сбрасывать кэш.

1. Как это реализовать в Оракле без использования Явы?
2. Т.е. у нас получается, что СУБД (в данном случае это слой которой содержит бизнес логику) завязывается на слой представления.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1205 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.