Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 3 4 5 6 7 8 9 [10] 11 12   вперед  Ctrl      все
 Re: MySQL и Firebird для Web  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
hvlad
vadiminfo
hvlad
Если вы не в состоянии понять, о чём идёт посторонний диалог, может не стоит в него встревать ?

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

Но особенно "по философски" выглядят ценные фразы вроде этой:
vadiminfo
наверное, от этого должно ломать.


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

Ну вам сторонникам только процедур виднее. Однако, думаю, что этого все еще не достаточно, чтобы становиться таковым сторонником. Думау, пока юзать все возможности СУБД, но в первую очередь язык БД. Вплоть до выяснения новых обстоятельств, про которые не лень буит рассказвать сторонникам.
9 авг 10, 11:57    [9233229]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
artemana
Member

Откуда: Днепропетровск
Сообщений: 1929
vadiminfo, спокойней.
У нас вся система построена на триггерах (их больше 10 000). Там есть все и сервис (первичные ключи, простые проверки) и сложная бизнес логикак, и различное логирование. Но я представляю как можно было бы построить эту систему и без них, только на процедурах. Общая концепция такова, всем пользователям и ролям, запрещаются любые операции редактирования таблиц. Вместо этого на каждую необходимую операцию (insert,delete,update) создается процедура, в которой пишется сама операция редактирования плюс обрамляющий ее код (аналоги триггеров). В пределе таких процедур создается N*3, где N количество таблиц. Каждой процедуре даются права на операции редактирования таблиц. Пользователям и ролям даются права процедуры. В клиентском приложение операции редактирования перенаправляются с команд (insert, delete, update) на вызовы соответствующих процедур. Ранее упомянутый обрамляющий код в них, как и в случае триггеров, может состоять как из обычных ddl команд, так и из вызовов процедур.
Аргументов в пользу такого подхода высказываются следующие:
1. Система на процедурах более понятна, так как в триггерах люди часто так запутывают логику, что не поймешь какое из каксадных событие привело к чему. На мой взгляд аргумент слабый, так как каскад вызываемых процедур, запутывается профанами не менее легко. При правильном общем стиле программирование проблем не должно возникать ни там, ни там. И наоборот при неправильном, проблему будут в обоих подходах.
2. Решение определенных проблем безопасности. Тут подробности я не помню. Возможно, речь идет о закрытие каких либо дырок, но может и нет.
3. Дополнительный уровень абстракции. Ну это на любителя. Есть свои плюсы и минусы.
9 авг 10, 12:21    [9233445]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Warstone
Member

Откуда:
Сообщений: 4896
Блог
Итак пошел холивар ХП vs пярмые селекты в приложении??

Огорчу: ХП. Так как:
1) расносятся роли БДА/Писателя запросов(некоторые это исключаю из ДБА, а некоторые вносят) и Программиста клиентской части.
2) Появившийся слой абстракции позволяет настроить безопастность более гибко.

Из своей практики с Постгре:
Есть одна схема api, в которую может смотреть public(все пользователи) или application_user(группа пользователей). В этой схеме вынесены только заглушки в другие схемы и выглядит это примерно так:
CREATE OR REPLACE FUNCTION api.<real_schema>_<function_name>(<params>) RETURNS [SETOF] RECORD | <data_type> AS $BODY$
BEGIN
    RETURN QUERY SELECT * FROM <real_schema>.<function_name>(<params>);
END;
$BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;

ALTER FUNCTION api.<real_schema>_<function_name>(<params>) SET OWNER 'application_inner';
Отчасти в Пг это сделано потому что если ты даешь возможность USAGE на схему и EXECUTE на процедуру, то ты можешь увидеть содержимое этой процедуры. Тут, насколько я знаю, Пг проигрывает Ораклу и довольно-таки сильно.
Отчасти это сделано из-за SECURITY DEFINER. То есть вызов процедуры из реальной схемы уже идет с правами другой группы, которая может работать с схемами, таблицами и внутренними процедурами. Обычно основная логика концентрируется именно тут. На триггеры-же практически ничего не вешается, кроме логгирования и вызова нотификаций.

В качестве расширения этой технологии, обычно в api процедуры еще добавляют верификацию пользователя. Но это больше для веб приложений или приложений с расширенной системой ролей и прав.
9 авг 10, 12:26    [9233488]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
vadiminfo
Gluk (Kazan)
Сторонники процедур не открывают DML напрямую.
Некоторые сторонники не открывают даже select (но я к ним не отношусь)

Не совсем понял. Я думал из контекста предыдущего процедуры противопоставляются триггерам. Но мож я не все прочитал? А как стронники процедур получают доступ к данным, и как их модифицируют?


Нельзя противопоставлять теплое мягкому, но можно вести разработку, в частности, так, что триггеры (в основном) не будут нужны. Подчеркну, я не призываю фанатично отказываться от использования триггеров. Просто у них есть минусы, знать о которых необходимо.
9 авг 10, 12:27    [9233501]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Warstone
Member

Откуда:
Сообщений: 4896
Блог
artemana
В пределе таких процедур создается N*3, где N количество таблиц.
4, как минимум. Полный CRUD + что-нибудь типа sign и любые другие действия над сущностью, типа провода документа и т.д.
9 авг 10, 12:28    [9233505]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Warstone
Member

Откуда:
Сообщений: 4896
Блог
А... пардон... Холивар триггеры vs хп...

По удобству, на самом деле - больше "как привык":
1) Триггеры - систему строили от данных, то есть от таблиц и т.д.
2) ХП - систему строили от объектов и методов над ними.

Оба подхода имеют право на существование, 2-й подход ИМХО более ООП-style. Потом мне, как разработчику всего комплекса - удобнее.
9 авг 10, 12:31    [9233528]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
hvlad
Примеры не совсем равноценны. В первом варианте row-level триггеры, во-втором statement-level, так сказать.
Если бы в ORACLE были аналоги таблиц inserted\deleted из T-SQL (а может уже есть ?), то первый вариант можно было бы переписать с их использованием,
чтобы добиться более полной аналогии со-вторым.


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

Что до statement-триггеров, из них нельзя получить список измененных строк, с :old и :new значениями. Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере.
Но переключений контекстов получается немерянно.

hvlad

Для себя я вижу тут два основных вывода:
а) переключение PL\SQL <-> SQL имеет место быть и стоит не дёшево, поэтому принято экономить на таких переключениях
б) в Firebird эта проблема стоит гораздо менее остро, т.к. нет таких переключений. Есть только обычные затраты на вызов PSQL процедуры\тригера
(передача параметров и т.п.)


Именно так. Это специфика Oracle
9 авг 10, 12:37    [9233577]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Mexanik
Member

Откуда: из России
Сообщений: 260
AlexPhil
Mexanik,

Главное понять, для чего это всё нужно.

На Delphi + FB в части клепания сайтов денег не заработаешь, однозначно.
На PHP + MySQL будет большая конкуренция "студентов", зато .
На ASP .NET + MS SQL не будет большого объема халтуры (хотя найти можно, в том числе и по шарепоинту) за то
За Java денег хорошо платят, особенно если от сайтостроительства отойти:)


Это нужно для разового решения одной задачи - сделать общую базу данных для нескольких филилалов, разбросанных по городам (сбор заявок на услуги, контроль исполнения и прочая небольшая чушь). В веб проектирование ударяться глобально не собираюсь и этот проект раскручивать тоже не думаю.... Клиент поговаривает о собственном веб-узелке, на который можно напихать необходимых сервисов. Теперь подход к задаче не выглядит таким извратным?
9 авг 10, 12:38    [9233586]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Yo.!
Guest
kdv

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

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

kdv
какой еще в дуду "порядок"... может, в оракле привыкли пользоваться rownum, я не знаю, но у людей, использующих FB, привычки к "порядку строк" нет, потому что в SQL тоже порядок строк не гарантируется (кроме сортировок order by).

по моему я достаточно разжувал ...
9 авг 10, 12:39    [9233599]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
hvlad

Слово "атомарность" выше было употреблено не по назначению. Правильнее говорить о statement-level consistency.
Кстати, в стандарте я этого термина не нашёл. Но, так как он уже неоднократно употреблялся здесь, я надеюсь у нас не будет разночтений в его интерпретации.

Так вот, statement-level consistency, насколько я помню, не диктуется стандартом, а оставляется на усмотрение производителя.
Я говорю о такой характеристике курсора, как sensitivity, которая, если не указано явно, является ASENSITIVE (секция 4.32 Cursors).
Если есть другие ссылки на стандарт - буду рад ознакомиться.

Так что формально read-committed в Firebird работает правильно, ибо речь в его определении идёт только о допустимых феноменах.

Другой вопрос, что вы привыкли к оракловому пониманию statement-level consistency для RC :)


Возможно я неправ, но для меня немножко дико видеть изменения, выполненные другой транзакцией не целиком. Да, та транзакция была выполнена атомарно, но то что она наизменяла, мы таковым не видим, со всеми возможными вытекающими ...
9 авг 10, 12:40    [9233610]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
hvlad
Member

Откуда:
Сообщений: 11551
Gluk (Kazan)
Просто есть разные способы вести разработку. При некоторых методах разработки, триггеры становятся не очень нужны. У этих метод есть сторонники и противники, плюсы и минусы ...
Согласен

Gluk (Kazan)
Что до statement-триггеров, из них нельзя получить список измененных строк, с :old и :new значениями. Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере.
Я знаю :)

Gluk (Kazan)
Именно так.
COMMIT
:)

Gluk (Kazan)
Это специфика Oracle
Именно. Каждый имеет право на специфику. В разумных пределах :)
9 авг 10, 13:14    [9233987]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
hvlad
Member

Откуда:
Сообщений: 11551
Gluk (Kazan)
Возможно я неправ, но для меня немножко дико видеть изменения, выполненные другой транзакцией не целиком. Да, та транзакция была выполнена атомарно, но то что она наизменяла, мы таковым не видим, со всеми возможными вытекающими ...
Ну так никто не заставляет пользоваться rc там, где нужен snapshot.
Тем более, что snapshot в Firebird/Interbase был изначально и является уровнем изоляции по-умолчанию.
Всё остальное - дело вкуса, привычек и специфики, если не оговорено стандартом.
9 авг 10, 13:18    [9234036]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
protector
Member

Откуда: Иваново, Россия
Сообщений: 600
Gluk (Kazan)

Ну шо я могу сказать ... фигово ты знаешь Oracle. Этому финту первым делом
студентов учат

Собственно упомянутый способ обхода мутации заключается в сохранении этой
информации в row-level before триггере, с последующей отработкой в statement
after триггере.
Но переключений контекстов получается немерянно.


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

Posted via ActualForum NNTP Server 1.4

Сообщение было отредактировано: 9 авг 10, 13:39
9 авг 10, 13:20    [9234063]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Gluk (Kazan)

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

На практике, я вседа пытаюсь предупреждать проггеров, чтобы не писали триггеров из каких-то идей оптимизации приложения, под тем предолгом, что это применение средств не по назначению. Однако, если процедукра должна запускаться на событие БД, например, таково типа бизнес правило, то для этого триггер подходит, скорее всего, луче всего. Исключение триггеров где они могли бы быть на своем месте тоже может нести риски увеличения энтропии программного обеспечения.
9 авг 10, 13:24    [9234109]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

Yo.!

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

Забавно, что преподаватели, о которых упоминал Глюк тоже не понимают в чём опасность и по
его же словам расказывают всем студентам как им обойти заботливые защитные механизмы.
Чтобы эти студенты тоже могли лабать говнокод.

Posted via ActualForum NNTP Server 1.4

9 авг 10, 13:24    [9234116]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
protector
Gluk (Kazan)

Ну шо я могу сказать ... фигово ты знаешь Oracle. Этому финту первым делом
студентов учат

Собственно упомянутый способ обхода мутации заключается в сохранении этой
информации в row-level before триггере, с последующей отработкой в statement
after триггере.
Но переключений контекстов получается немерянно.


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

Posted via ActualForum NNTP Server 1.4


Ok, твое решение проблемы???
9 авг 10, 13:50    [9234369]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

protector
Назвать подобный бред решением проблем с мутацией...

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

Posted via ActualForum NNTP Server 1.4

9 авг 10, 13:50    [9234370]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Dimitry Sibiryakov

Yo.!

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

Забавно, что преподаватели, о которых упоминал Глюк тоже не понимают в чём опасность и по
его же словам расказывают всем студентам как им обойти заботливые защитные механизмы.
Чтобы эти студенты тоже могли лабать говнокод.


Ты просто нефтеме
9 авг 10, 13:55    [9234406]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Yo.!
Guest
Gluk (Kazan)


Ok, твое решение проблемы???


я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.

Dimitry Sibiryakov

когда Оракул научится использовать версионность для
искоренения мутаций. Ответ - никогда.

т.е. один раз сесть в лужу на вопросе как ты себе представляешь использование версионности для искоренения мутации тебе было не достаточно. что же прошу снова в туже лужу или может на этот раз ты нам поведаешь свою болезенную фантазию как версионность могла бы тут помочь ?
9 авг 10, 14:56    [9234908]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Dimitry Sibiryakov

protector
Назвать подобный бред решением проблем с мутацией...

Так уже неоднократно сказали, что это не решение, а обход проблемы. Т.е. забивается болт
на встроенную в Oracle версионность и на коленке ляпается свой суррогат оной. Что и
приводит нас обратно к моему вопросу: когда Оракул научится использовать версионность для
искоренения мутаций. Ответ - никогда.
скорее всего бесполезно, но я всё-таки попробую объяснить
проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после изменений в операторе, вызвавшим триггер и после изменений в самом триггере
В MSSQL это решается введением таблиц inserted и deleted, нечто приблизительное предлагается и для обхода этого в Оракле
т.е. это проблема логическая и никакими техническими ухищрениями не решается

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

А приплетать сюда версионность... ну это наверное очень неподумавши...
9 авг 10, 15:14    [9235116]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Yo.!
Gluk (Kazan)


Ok, твое решение проблемы???


я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.


Гммм ... а я что сказал?
Кстати я протектора спрашивал :) Твое видение проблемы мне и так понятно
9 авг 10, 15:23    [9235198]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Warstone
Member

Откуда:
Сообщений: 4896
Блог
Yo.!

я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.
А в Постгре об этом подумали =) в statment триггере нет доступа к данным. Он только в row-level.
9 авг 10, 15:26    [9235220]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

SergSuper

проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после
изменений в операторе, вызвавшим триггер и после изменений в самом триггере

Вот как раз "иметь две сущности таблицы" и называется "версионностью". В триггере просто
должна быть доступна версия таблицы до старта DML.

Posted via ActualForum NNTP Server 1.4

9 авг 10, 15:27    [9235228]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Dimitry Sibiryakov

SergSuper

проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после
изменений в операторе, вызвавшим триггер и после изменений в самом триггере

Вот как раз "иметь две сущности таблицы" и называется "версионностью". В триггере просто
должна быть доступна версия таблицы до старта DML.
и в FB так и сделано?
(но в любом случае версионность это несколько другое)
9 авг 10, 15:44    [9235401]     Ответить | Цитировать Сообщить модератору
 Re: MySQL и Firebird для Web  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54751

SergSuper
и в FB так и сделано?
(но в любом случае версионность это несколько другое)

Нет, в FB читаются текущие для данной транзакции данные, но Оракло-гайз настаивают, что
читать надо консистентные данные, до DML...

И что же такое версионность в Вашем понимании?

Posted via ActualForum NNTP Server 1.4

9 авг 10, 15:51    [9235468]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 3 4 5 6 7 8 9 [10] 11 12   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить