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

Поиск:

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

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



По мотивам обсуждения тема.

Как грится - кому что по душе и лучше обосновано плюсы и минусы подходов!

ps. Почему pl/sql - там чаще всего наворачиваются мощные супер системы.

Это сообщение отредактировал(а) serger - 25.9.2008, 17:15


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 25.9.2008, 17:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



По чистой производительности PL/SQL сильно уступает Java (по заявлениям самого Oracle). Плюс многие вещи на PL/SQL надо делать через одно место.

Единствено когда PL/SQL лучше, это реализация хитрых запросов, которые "невыразимы" SQL-ем. И вообще ситуации, когда SQL сотавляет основную часть логики работы процедуры.

А вообще холивар пустой, ибо сравниваются совершенно разные вещи.


--------------------
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   Вверх
seth
Дата 25.9.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

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



Цитата(serger @ 25.9.2008,  17:11)
По мотивам обсуждения тема.

Как грится - кому что по душе и лучше обосновано плюсы и минусы подходов!

ps. Почему pl/sql - там чаще всего наворачиваются мощные супер системы.

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

Добавлено @ 17:47
Цитата(LSD @ 25.9.2008,  17:36)
По чистой производительности PL/SQL сильно уступает Java (по заявлениям самого Oracle). Плюс многие вещи на PL/SQL надо делать через одно место.

Единствено когда PL/SQL лучше, это реализация хитрых запросов, которые "невыразимы" SQL-ем. И вообще ситуации, когда SQL сотавляет основную часть логики работы процедуры.

А вообще холивар пустой, ибо сравниваются совершенно разные вещи.


имелось ввиду скорее
обработка данных в приложении  + обработка данных в БД чем просто ORM vs JDBC

Это сообщение отредактировал(а) seth - 25.9.2008, 17:50


--------------------
PM MAIL   Вверх
serger
Дата 26.9.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

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



Почему я выбрал такое сравнение.

Том Кайта читали? Хотя бы вступление? Извините за несколько фамильярный стиль, однако немного прёт... (пятница, пиво...)
Там приводится пример, почему не нужно забывать про БД. Мифическая компания разработала JEE приложение,по всем правилам и тп, но столкнулась с проблемой быстродействия. БД видете-ли тормозила. Позвали специалиста, тот сказал - типа вы с БД не умеите работать, надо это исправить! Ну пиво или там чай - все принялись за дело и УХ!... ЦЕЛЫХ две недели тюнили БД. Беда-то какая!!!

Я не буду писать свои выводы, с датами тоже мог ошибиться, но не намного и это ИМХО не существенно. Просто предлагаю задуматься, что это значит, ну и поспорить..

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



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 26.9.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(serger @  26.9.2008,  20:06 Найти цитируемый пост)
Том Кайта читали?

Читали. Нигде у него не сказано, что надо обязательно бизнес логику вносить в базу. Правильное проектирование и настройка базы, вовсе не означает, что бизнес логика должна быть внутри базы.


--------------------
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
Дата 11.11.2010, 11:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Хотел создать похожую тему, поиск подсказал что тема уже обсуждалась.
Жаль что тема не развилась. Мне было бы ОЧЕНЬ интересно почитать доводы сторон.
Удастся ли возобновить обсуждение?

На тему стал интенсивно задумываться после публикации линка на ЖЖ в теме "Извините за офтоп. Просто посмеяться" в ораклином подразделе на sql.ru, с коментарием "ЖЖшные леминги обсуждают Oracle". Есесно ораклиное сообщество оборжало высказанные там мысли.

Мне же от чегото не было ржачно. Тема для меня не достаточно исследована, чтобы признавать ее абсурдной априори. Потому я начал думать.

Что надумал:

Вынос прикладного слоя на выделеный сервер приложений, для меня, безусловно, необходим в случаях:
1) Платформа СУБД не представляет сколь нибудь удобного инструментария для реализации прикладной логики
2) Прикладная логика весьма увесиста и требует много вычислительных ресурсов
3) Абстрагирование от платформы СУБД.

большего количества пунктов я придумать не смог. Хотя думал долго.

*1
К первому пункту я безусловно отношу такие платформы как MySQL, Fb, MS Sql(хотя я не знаю как там сейчас обстоят дела, вроде как они уж прикрутили clr, возможно это чтото изменило, но на tsql сколь нибудь замороченную прикладную логику реализовать - мазохизм)

К ораклу первй пункт применить сложно. PL/SQL достаточно развитый язык, на нем действительно можно чтото написать. Он позволяет поднимать и обрабатывать исключения, ограничивать область видимости функций, определять глобальные переменные и константы. Есть даже, хоть и куцая, объектная модель, полиморфные свойства которой вполне можно использовать. Где не хватает PL/SQL, можно прикрутить жаву (но на моей парактике я встечал лишь единожды, когда применение жавы было обусловлено сложностью задачи а не предпочтением разработчика)

*2
Действительно увесистая прикладная логика встречается весьма редко. Мне она вообще ни разу не встречалась. Мне не приходилось конвертить картинки, видео, шифоровать, паковать, распаковывать. 99,9(9)% прикладной логики, с какой мне доводилось сталкиваться и реализовывать - подсмотреть какието данные в базе, на основании их принять решение и сохранить его в качестве результата либо поднять исключение. Т.е. большая часть вычислительного ресурса тратится на доступ к данным. Разбор XML, пожалуй, самый трудоемкий, с точки зрения нагрузки на проц, процесс, который не связан с доступом к данным и который мне доводилось использовать при реализации прикладной логики. 99,9(9)% циклов, реализованных мною предназначены для обхода курсора, не для иттерационных вычислений.

*3
Это исключительно маркетинговая фишка. Любой вменяемый технический специалист будет отбрыкиваться всеми доступными ему средствами от желаний маркетологов скрестить лопату с микроскопом. Средства обеспечения согласованности данных в MS SQL и Оракле настолько различны, что технарю придется забрать на себя львиную долю забот, которые можно было бы возложить на СУБД. Когда этот довод звучит из уст технаря, я недоумеваю.

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

Однако. Что меня заставляет усомниться. Оракл не стремится развивать свой PL/SQL и он направил свои усилия на развитие своего app. Т.е. видение самой oracle corp в том, что прикладная логика таки должна реализовываться гдето сбоку.

Мне это нихрена не понятно. Я это очень хотел бы понять. Я не вижу никаких приемуществ выноса прикладной логики на аpp, иных кроме "это круто", "это сложно", "заказчик офигеет и не станет сомневаться  достаточности длины нашего перца". Эти тезисы имеют место быть, но они не технические. Когда я роюсь в исходниках того же oracle corp, что я вижу? Я вижу что часть прикладной логики они реализуют в формах, а часть - на датабазе. Зачастую это одна и та же логика. Это же вообще швах. Не, я понимаю, что они на датабазу сливают тот функционал, который может быть востребован не только их апп, но и другими приложениеми. Но нафига нужен такой апп, если все равно часть логики приходится сливать на бд? Я так полагаю что если у нас прикладную логику реализует апп, то все импорты, конверсии, сопряжения со сторонними модулями должны идти исключительно и только через него. Если это напряжно, трудоемко... тогда бизнеслогику  держим на стороне бд и баста.

Это сообщение отредактировал(а) Zloxa - 11.11.2010, 17:05


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


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


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

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



тут еще была похожая тема
http://forum.vingrad.ru/index.php?showtopi...t&p=2024681

Цитата

Действительно увесистая прикладная логика встречается весьма редко. Мне она вообще ни разу не встречалась. Мне не приходилось конвертить картинки, видео, шифоровать, паковать, распаковывать. 99,9(9)% прикладной логики, с какой мне доводилось сталкиваться и реализовывать - подсмотреть какието данные в базе, на основании их принять решение и сохранить его в качестве результата. Т.е. большая часть вычислительного ресурса тратится на доступ к данным. 


СУБД умеет как-то конвертировать картинки?

Это сообщение отредактировал(а) gcc - 11.11.2010, 13:02
PM WWW ICQ Skype GTalk Jabber   Вверх
Zloxa
Дата 11.11.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(gcc @  11.11.2010,  12:28 Найти цитируемый пост)
СУБД умеет как-то конвертировать картинки?

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

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

Это сообщение отредактировал(а) Zloxa - 11.11.2010, 16:27


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


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


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

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



ПРО ORM
- если приложение - это админка, где есть много запросов маленьких через Ajax, то как раз удобно тут применить ORM?
т.е. получается сложных запросов нету, а везде такие на подобе select id from table id = 1

- ORM дает кроссплатформенность между СУБД, можно выбрать любую (некоторые дают возможность использовать LDAP)

- защита от инъекций, при настройке ORM расставляется типы столбцов и сразу стоит защита от инъекций к конкретному типу столбцу 

- ORM удобный:
wikipedia
Цитата

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

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

На практике всё не так просто и очевидно. Все системы ORM обычно проявляют себя в том или ином виде, уменьшая в некотором роде возможность игнорирования базы данных. Более того, слой транзакций может быть медленным и неэффективным (особенно в терминах сгенерированного SQL). Все это может привести к тому, что программы будут работать медленнее и использовать больше памяти, чем программы, написанные «вручную».

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



при обрабоке данных красиво получается на CRUD, разные обработчики форм, обрабатывают и строят запрос INSERT UPDATE
да, кроме ORM есть другие абстракции Rose:smileB или где INSERT UPDATE генерируются с помощью классов, а SELECT в нативном виде...
Код

my $hash;
$hash->{user_id} = $id_user;
$hash->{username} = $c->request->params->{username};
$hash->{code} = $code;
$hash->{ip} = $c->request->address;
$hash->{forwarded} = $c->request->header('X-Forwarded-For');
$hash->{host} = $c->request->hostname;
$hash->{created} = time;

$c->model('DBI')->dbh->do('UPDATE base SET '.( join ", ", map { $_ .' = ? ' } keys %$hash ).' WHERE id='.$id, undef, values %$hash );


НО и есть такае запросы которые НЕ написать на ORM и даже на чистом SQL, то приходится использовать ТОЛЬКО plpgsql ? 
где очень сложная логика в триггерах и процедур на PostgreSQL...

Код

--
-- Name: on_message(); Type: FUNCTION; Schema: public; Owner: dbmail
--

CREATE FUNCTION on_message() RETURNS trigger
    AS $$declare
  mb dbmail_mailboxes;
  sb bigint;
  _from varchar;
  _fromuser varchar;
  _fromdomain varchar;
  _envelope_from varchar;
  _to varchar;
  _toname varchar;
  _subj varchar;
  _key varchar;
  _tmpl bigint;
begin
  perform warn('on_message ' || new.message_idnr);

  select into mb * from dbmail_mailboxes where mailbox_idnr=new.mailbox_idnr;
  perform warn(mb.owner_idnr || '/' || mb.name || '=' || mb.mailbox_idnr);
  if( mb.name != 'INBOX' )then
    perform warn('not inbox');
    return new;
  end if;
 
  select into _to toaddr from dbmail_tofield where physmessage_id=new.physmessage_id;
  select into _toname toname from dbmail_tofield where physmessage_id=new.physmessage_id;
-- <костыль>
  if not (select count(*)::integer::boolean from dbmail_aliases where deliver_to=mb.owner_idnr::varchar and alias=_to) then
    select into _to ccaddr from dbmail_ccfield where physmessage_id=new.physmessage_id;
    select into _toname ccname from dbmail_ccfield where physmessage_id=new.physmessage_id;
    if not (select count(*)::integer::boolean from dbmail_aliases where deliver_to=mb.owner_idnr::varchar and alias=_to) then
      _toname := '';
      select into _to userid from dbmail_users where user_idnr=mb.owner_idnr;
    end if;
  end if;
-- </костыль>
  select into _from fromaddr from dbmail_fromfield where physmessage_id=new.physmessage_id;
  select into _fromdomain substring(_from from '@(.*)');
  select into _fromuser substring(_from from '(.*?)@');

if not (select count(*)::integer::boolean from user_prefs where user_idnr=mb.owner_idnr and whitelist=true) then 
    return new;  -- Если вайтлист выключен, то записать во входящие
  end if;

  select into _envelope_from headervalue from dbmail_headervalue where (physmessage_id=new.physmessage_id) and (headername_id = 197);
  select into sb spambox from user_prefs where user_idnr=mb.owner_idnr;
perform warn('F='||_from||' T='||_to||' D='||_fromdomain||' U='||_fromuser);
  
if( select id::boolean from dbmail_whitelist where (user_idnr=mb.owner_idnr) and (
       mail=_from
    or mail='@'||_fromdomain
    or mail=_fromdomain
    or _from like '%.'||mail 
  ) limit 1 )then
    return new;   -- Если в локальном вайтлисте - записать в инбокс.
  end if;

  
  if (substring(_to from '@(.*)')=_fromdomain) 
     then  -- Если внутри домена
     if not (substring(_envelope_from from '@(.*)')=_fromdomain) 
       then -- и адрес на конверте не совпадает
       update dbmail_messages set mailbox_idnr=sb where message_idnr=new.message_idnr;  --то в спам
       end if;
     return new; -- а если совпадает, то в инбокс.
  end if;

if( select id::boolean from dbmail_whitelist where (user_idnr=3) and (substring(_envelope_from from '@(.*)')=_fromdomain)and (
       mail=_from
    or mail='@'||_fromdomain
    or mail=_fromdomain
    or _from like '%.'||mail 
  ) limit 1 )then
    return new;   -- Если в глобальном вайтлисте, и адрес на конверте совпадает - записать в инбокс.
  end if;


  if (_fromuser='mail.robot') then -- Если якобы от 'mail.robot'
       if (select count(*)::integer::boolean from domains where domainname=_fromdomain limit 1) then -- и из локального дмена
          if not (substring(_envelope_from from '@(.*)')=_fromdomain) 
             then -- Если адрес на конверте не совпадает
             update dbmail_messages set mailbox_idnr=sb where message_idnr=new.message_idnr;  --то в спам
             end if;
      return new; -- иначе во инбокс
    end if;
  end if;
      

  
perform warn('!-1-!');
    
    update dbmail_messages set mailbox_idnr=sb where message_idnr=new.message_idnr; -- все остальное в спам

    
  select into _subj subjectfield from dbmail_subjectfield where physmessage_id=new.physmessage_id;
  
  select into _tmpl template from user_prefs where user_idnr=mb.owner_idnr;
  perform warn('TMPL='||_tmpl);
  
  if (_toname='') then _toname=_to; end if;
  select into _key captcha(mb.owner_idnr,_from,_toname||' <'||_to||'>',_subj,_tmpl);
  insert into "captcha" ("key",message_idnr,"from","to") values (_key,new.message_idnr,_from,_to);

--  if( _from ~ '<' ) then select into _from substring( _from from '<(.*?>'); end if;
--perform warn('F='||_from);

  
  return new;
end;
$$
    LANGUAGE plpgsql;

ALTER FUNCTION public.on_message() OWNER TO dbmail;


Это сообщение отредактировал(а) gcc - 12.11.2010, 18:25
PM WWW ICQ Skype GTalk Jabber   Вверх
Zloxa
Дата 12.11.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Реализация прикладной логики на стороне бд ни коим образом не препятствует использованию ОРМ для реализации репрезентативного слоя.

Добавлено через 7 минут и 55 секунд
Хотя... возможно вру.
Я правильно припоминаю что некоторые ОРМ кэшируют данные и, если данные были модифицированы мимо этих ОРМ, они теряют согласованность?

Это сообщение отредактировал(а) Zloxa - 12.11.2010, 20:11


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


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


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

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



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

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

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

Окончательного ответа на мой взгляд нету. Всё зависит от задачи и предпочтений разработчиков (впрочем, от последнего больше). Столь модные ныне различные нереляционные базы редко разрешают вообще хранимки писать..


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


Чо?
****


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

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



Цитата(Любитель @  15.11.2010,  02:58 Найти цитируемый пост)
Как бы то ни было, людей, хорошо разбирающихся с адвансед использованием СУБД мало. Если какой-т функционал в проекте понимает только один человек - это всегда плохо.

Недопущение концентрации компетенций в одном ресурсе это управленческая проблема - не техническая.

Но тут... конечно мое мнение субъективно, но реализованная средставами БД логика, как правило, имеет легко выявляемые жесткие связи, что позволяет разобраться в ней куда проще, нежели в никак не связанных svn, war и бд. Это, конечно более характерно для саппорта, нежели девелопмента. Стык девелопмента с саппортом, как правило, имеет много организационных лакун. Логику, реализованную в бд, мне кажется, намного проще забрать на саппорт ввиду ее гомогенности.
Цитата(Любитель @  15.11.2010,  02:58 Найти цитируемый пост)
Проблема прозрачного горизонтального масштабирования.

Да, у меня были мысли относительно того, что один апп может держать одновременный коннект многим бд.
Тут две ветки рассуждений
1) Апп может работать с разнородными БД. В этом случае апп выступает в роли надстройки и пользует интерфейсные функции прикладного слоя, который с тем же успехом может быть реализован ХП.
2) Апп может работать с однородными БД, распределяя нагрузку между ними. Тогда апп действительно придется на себя забрать огромный ломоть прикладной логики. Но, вместе с тем, придется на себя забирать и обеспечение согласованности данных между разными инстансами - имхо весьма, и весьма скользкая и ответственная задача.

Для реализации этого самого горизонтального масштабирования средствами БД, если там применим воркфлоу подход, вполне может оказаться пригодной технология Oracle streams AQ

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


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


Чо?
****


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

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



Цитата(Zloxa @  15.11.2010,  11:21 Найти цитируемый пост)
Логику, реализованную в бд, мне кажется, намного проще забрать на саппорт 

Подумалось вот.
Это может работать как в плюс, так и в минус.
Для аутсорсящей компании, в случае, если инхаус заказчика сможет разобраться в логике и забрать на себя саппорт, это будет эпик фейл.
Но это тоже не техническая проблема, скорее показатель ее отсутствия.

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


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


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


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

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



Цитата(Zloxa @  15.11.2010,  11:21 Найти цитируемый пост)
Недопущение концентрации компетенций в одном ресурсе это управленческая проблема - не техническая.

Ну.. Просто со статистикой приходиться мириться. Людей хорошо разбирающихся в базах мало.

Цитата(Zloxa @  15.11.2010,  11:21 Найти цитируемый пост)
svn, war и бд.

Не понял, что это значит.

Цитата(Zloxa @  15.11.2010,  11:21 Найти цитируемый пост)
Апп может работать с однородными БД, распределяя нагрузку между ними.

Я имел ввиду в первую очередь этот кейс. У нас возросло на порядок количество юзеров и мы справляемся с этим, просто добавив машины (ну, я условно).

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

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


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


Чо?
****


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

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



Цитата(Любитель @  15.11.2010,  11:47 Найти цитируемый пост)
Цитата(Zloxa @  15.11.2010,  11:21 )
svn, war и бд.

Не понял, что это значит.

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

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

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

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


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


Чо?
****


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

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



Цитата(LSD @  7.12.2010,  20:04 Найти цитируемый пост)
1. Как это реализовать в Оракле без использования Явы?

dbms_alert- бомба вещь.
Цитата(LSD @  7.12.2010,  20:04 Найти цитируемый пост)
2. Т.е. у нас получается, что СУБД (в данном случае это слой которой содержит бизнес логику) завязывается на слой представления.

Нет, он не завязыается. Это просто средство оповещения всех заинтересованных сторон. Процесс, сигналящий алерт не знает, слушает ли его кто. 

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



Это сообщение отредактировал(а) Zloxa - 7.12.2010, 20:35


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 2
Всего: 26



Цитата(LSD @  7.12.2010,  20:04 Найти цитируемый пост)
А зачем в стендбай писать, писать надо в мастер. Организовать согласованную запись в одну базу на уровне сервера приложений не сложно.


Будет несогласованость по чтению: репликация штука не моментальная. Это неплохо делать для аналитики, но для боевого OLTP бессмысленно - тут только RAC.

Это сообщение отредактировал(а) ToshaCh - 8.12.2010, 10:06


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
LSD
Дата 8.12.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @  7.12.2010,  21:32 Найти цитируемый пост)
Нет, он не завязыается. Это просто средство оповещения всех заинтересованных сторон. Процесс, сигналящий алерт не знает, слушает ли его кто.

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


Цитата(ToshaCh @  8.12.2010,  11:05 Найти цитируемый пост)
Будет несогласованость по чтению: репликация штука не моментальная. Это неплохо делать для аналитики, но для боевого OLTP бессмысленно - тут только RAC.

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


--------------------
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
Дата 8.12.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @  8.12.2010,  17:35 Найти цитируемый пост)
Да с чего вы вообще это все взяли? Стендбай только как резервный, на случай выхода из строя мастера. Никакого чтения/записи из/в него, пока мастер работает. Нагрузку на базу снижать кешом между СУБД и сервером приложений. 

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

Цитата(LSD @  8.12.2010,  17:35 Найти цитируемый пост)
 Для моего примера, при изменении роли, сервер должен послать алерт для всех юзеров у которых есть эта роль, что надо обновить кеш юзер->пермишен.

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

Добавлено @ 17:58
В смысле я себе представляю кэширование как разделяемый поцессами приложения ассоциативный массив.
Возможно его можно реализовать еще какими то способами, и тогда, действительно его реализация может оказаться проблематичной.

Это сообщение отредактировал(а) Zloxa - 9.12.2010, 11:13


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 2
Всего: 26



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

Вот и я так подумал.

Добавлено через 14 минут и 15 секунд
Цитата(Zloxa @  8.12.2010,  17:50 Найти цитируемый пост)
Я даже нахожу что в этой идее действительно чтото есть.


Я пробовал такое реализовать. Боевая база работает по OLTP, а физический стендбай открыт для чтения (плюшка у 11g) для построения адских отчётов. Главная проблема с которой я столкнулся это устаревшие данные: на OLTP они уже не нужны, а для аналитики необходимы. Соответственно возникают грабли с производительностью. Следовательно нужен более умный перенос данных и его, на мой взгляд, логичнее делать имено на уровне базы.


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
LSD
Дата 27.7.2011, 14:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Пользуясь тем что "в интернете опять кто-то неправ" хочу поднять тему smile 

А как организовать unit и интеграционные тесты в СУБД?


--------------------
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   Вверх
serger
Дата 29.7.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

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



Цитата(LSD @ 27.7.2011,  15:51)
Пользуясь тем что "в интернете опять кто-то неправ" хочу поднять тему smile 

А как организовать unit и интеграционные тесты в СУБД?

Откуда дровишки?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 29.7.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(serger @  29.7.2011,  11:34 Найти цитируемый пост)
Откуда дровишки?

Ты о чем?


--------------------
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   Вверх
serger
Дата 29.7.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

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



Цитата(LSD @ 27.7.2011,  15:51)
Пользуясь тем что "в интернете опять кто-то неправ" хочу поднять тему smile 

Имелось ввиду: так кто же не прав в инете? Те ссылку.  smile 

Вроде что-то такое слышал есть...


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Zloxa
Дата 29.7.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @  27.7.2011,  14:51 Найти цитируемый пост)
А как организовать unit и интеграционные тесты в СУБД? 

Средствами реализации тестового сценария.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

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



А что вообще имеет смысл тестировать?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 29.7.2011, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(serger @  29.7.2011,  11:49 Найти цитируемый пост)
Имелось ввиду: так кто же не прав в инете?

Zloxa срывает покровы.



Цитата(Zloxa @  29.7.2011,  11:58 Найти цитируемый пост)
Средствами реализации тестового сценария.

Капитан, мы жаждем подробностей 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
Дата 29.7.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @ 29.7.2011,  11:14)
Цитата(Zloxa @  29.7.2011,  11:58 Найти цитируемый пост)
Средствами реализации тестового сценария.

Капитан, мы жаждем подробностей smile

Мы тоже. 


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


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @ 29.7.2011,  12:36)
Цитата(LSD @ 29.7.2011,  11:14)
Цитата(Zloxa @  29.7.2011,  11:58 Найти цитируемый пост)
Средствами реализации тестового сценария.

Капитан, мы жаждем подробностей 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
Дата 29.7.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @ 29.7.2011,  14:32)
Цитата(Zloxa @ 29.7.2011,  12:36)
Цитата(LSD @ 29.7.2011,  11:14)
Цитата(Zloxa @  29.7.2011,  11:58 Найти цитируемый пост)
Средствами реализации тестового сценария.

Капитан, мы жаждем подробностей smile

Мы тоже.

Чувствую долго ждать придется.

Ну это же твой наборос.

Взялся бросать - не говори что не дюж.

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

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

Это сообщение отредактировал(а) Zloxa - 29.7.2011, 14:41


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


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @  29.7.2011,  15:39 Найти цитируемый пост)
Ну это же твой наборос.

Взялся бросать - не говори что не дюж.

Набрасываю: в СУБД нельзя по человечески провести интеграционное и юнит тестирование, потому держать логику в СУБД ацтой smile 



Цитата(Zloxa @  29.7.2011,  15:39 Найти цитируемый пост)
Емнип в этой теме в качестве примера было упомянуто четыре примера прикладной логики. Проведение документа, валидация документа, валидация корректности номера банковской карты, кэширование запроса привелегий пользователя.

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

Тебя интересует зачем нужны тесты вообще? Или ты считаешь что приведенные тобой примеры чем-то кардинально выделяются?


--------------------
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
Дата 29.7.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



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

Это сообщение отредактировал(а) Zloxa - 29.7.2011, 14:55


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


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @  29.7.2011,  15:54 Найти цитируемый пост)
я не в состоянии оцнить те недостатки,  о которых ты говоришь, в виду не понимания преимуществ, о которых ты умалчиваешь

Зачем нужны юнит тесты, часть 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   Вверх
Zloxa
Дата 29.7.2011, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



LSD, не смотря на то что букав много, я стоически их осилил полностью. Все ждал когда мне откроется сокровенное. 

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

Я совсем не понимаю, о чем ты говоришь, когда говоришь что тестировать возможности нет.

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

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


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

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



Цитата(Zloxa @ 29.7.2011,  22:18)
Ну и немного скеписа. Любое юнит тестирование - плохое тестирование. Оно вскрывает только проблемы, предугадываемые разработчиком, а они представляют наименьший интерес.

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


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Zloxa
Дата 30.7.2011, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(k0rvin @  30.7.2011,  00:31 Найти цитируемый пост)
юнит-тесты пишет не разработчик модуля. 

Да, это выход. И такой подход одинаково применим как к прикадной логике на pl/sql, так и к логике на жаве.


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


Чо?
****


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

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



полуоффтоп.

LSD, не можешь подсказать, платформа жавы реализует механизм отслеживания взаимных блокировок? Что-то, на вскидку, не могу припомнить упоминания о таком. Он, имхо, жизненно необходим когда разраб прикладной логики заберет на себя рализацию изоляции транзакций.

И еще. Поможет ли инструментарий юнит тестов, дать заключение о корректности поведения тестирования модуля в конкурентной среде?


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


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @  29.7.2011,  23:18 Найти цитируемый пост)
Я совсем не понимаю, о чем ты говоришь, когда говоришь что тестировать возможности нет.

Я не говорю, что возможности нет. Я спрашивал как это реализуется, потому как я не слышал про юнит тесты для СУБД.



Цитата(Zloxa @  29.7.2011,  23:18 Найти цитируемый пост)
Ну и немного скеписа. Любое юнит тестирование - плохое тестирование. Оно вскрывает только проблемы, предугадываемые разработчиком, а они представляют наименьший интерес. При тестировании как раз таки интересно то, что не поедусмотрел разработчик. Потому лучшее тестирование - тестирование, в котором разработчик не принимает участия.

И еще. Поможет ли инструментарий юнит тестов, дать заключение о корректности поведения тестирования модуля в конкурентной среде?

Ты не правильно понимаешь суть юнит тестирования. Юнит тестирование не отменяет интеграционного и user acceptance testing, а просто дополняет его. Юнит тест тестирует маленький функциональный компонент (например класс) в изолированной среде, на предмет выполнения этим компонентом формального контракта. Смысл юнит тестов, это раннее обнаружение отклонений поведения компонента от контракта. И поэтому юнит тесты обычно запускаются во время сборки проекта.

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




Цитата(Zloxa @  30.7.2011,  13:57 Найти цитируемый пост)
LSD, не можешь подсказать, платформа жавы реализует механизм отслеживания взаимных блокировок? Что-то, на вскидку, не могу припомнить упоминания о таком. Он, имхо, жизненно необходим когда разраб прикладной логики заберет на себя рализацию изоляции транзакций.

Я вообще не понимаю о чем ты 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
Дата 1.8.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @  1.8.2011,  11:19 Найти цитируемый пост)
Я спрашивал как это реализуется, 

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

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

Цитата(LSD @  1.8.2011,  11:19 Найти цитируемый пост)
Я вообще не понимаю о чем ты  Приведи пример. 

Самый простой пример взаимной блокировки - когда процесс1, удерживающий блокировку ресурса А пытается захватить ресурс Б, удерживаемый процессом 2, который в то же самое время пытается захватить ресурс А. 

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


Это сообщение отредактировал(а) Zloxa - 1.8.2011, 12:37


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


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @  1.8.2011,  13:26 Найти цитируемый пост)
Самый простой пример взаимной блокировки - когда процесс1, удерживающий блокировку ресурса А пытается захватить ресурс Б, удерживаемый процессом 2, который в то же самое время пытается захватить ресурс А. 

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

Потоки JVM не убивает, но дедлоки детектит и можно программно их обнаружить (и прибить, если захочется).


--------------------
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.7.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



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

Цитата(LSD @  6.12.2010,  21:32 Найти цитируемый пост)
пример: есть система управления правами типа Oracle Entitlements Server, у нас есть юзер, права и роли. Чаще всего нам будет нужно для пользователя получить список его прав и проверить, есть ли у него право на некое действие/объект, так что кешировать связку человек-права вполне стоит. 


стыдно признаться, но про result_cashe узнал лишь недавно.

На сколько я понял резалт кэш может быть настроен как для pl/sql функции, так и для запроса. Резалткэш функции сбрасывается при коммите в таблицу, указанной в RELIES_ON. Для запроса, пока еще не понял, пока из статей остается ощущение, что резалткэш запросов не сбрасывается а обновляется при коммите в целевую табилцу. Гранулярность резалт кэша - инстанс датабазы, т.е. в отличи от модели кэширования которую я предлагал ранее (с кэшированием в глобальных пакетных переменных и сбросом по алерту), работает не только для одной сессии, а для всех сессий, которые попадают на этот инстанс.

Мне кажется что эта фича аккурат для твоего примера.

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


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



При реализации навороченных исчислений на базе данных оракл или другой, лучшим выбором будет реализация с помощью встроенного в базу данных инструмента, такого как pl/sql или java в виде Stored Procedures. На оракл, хранимые процедуры можно писать и на Java. Производительность системы написанной с помощью хранимых процедур будет более высокой за счёт того, что код и данные будут на одной и той-же машине. Мне приходилось работать с системами где было необходимо реализовать вычисление различных коэффициентов и статистики на основе данных в таблицах. Перенос логики в PL/SQL в десятки раз ускорил операции. Когда код начали крутить на онлайновой системе, DBA не могли поверить, что расчёты стали выполнятся мгновенно. Исполнение кода процедур внутри процесса базы данных очень сильно ускоряет расчёты. И не важно на java написана процедура или на PL/SQL. 

Что-же касается ORM, то он хорош для CRUD операций с клиентских машин или веб-серверов. Делать системы сложных расчётов на ORM - это стрелять себе в ногу.
PM   Вверх
serger
Дата 5.7.2013, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

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



dobrolub, пардон, ко.  smile 


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 5.7.2013, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Zloxa @  4.7.2013,  16:39 Найти цитируемый пост)
Мне кажется что эта фича аккурат для твоего примера.

Я в основном говорил про im memory cache, не дисковый. Т.е. поднимаем сотню дешевы серверов которые в памяти держат данные и отдают по запросу.


--------------------
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
Дата 5.7.2013, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @  5.7.2013,  11:28 Найти цитируемый пост)
Я в основном говорил про im memory cache, не дисковый.

Это и есть инмемори.  В SGA инстанса.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

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

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


 




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


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

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