Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 12 13 14 15 16 [17] 18 19 20 21 .. 24   вперед  Ctrl
 Re: Покритикуйте Оракл 10г  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Я думаю на этом личные выяснения закончим. Все дальнейшие высказывания такого рода буду тереть, думайте прежде чем писать то что будет стёрто.

По существу вопроса
Gluk (Kazan)

Как в триггере определить множество updated-строк в случае если изменялосб значение PK (в общем случае, при отсутствии других ключей) ??? На вопрос был получен ожидаемый ответ НИКАК. Т.е. предлагаемый механизм не обеспечивает для разработчика ВСЕХ возможностей (в то время как для сервера, вполне возможно одновременно построить три псевдотаблицы inserted, updated и deleted, покрывающих ВСЕ потребности разработчика).

А в триггере на строку нельзя апдейтить таблицу, которая меняется. Получается он тоже не обеспечивает для разработчика ВСЕХ возможностей, ведь такая ситуация может встетиться гораздо вероятней чем изменение ключа.
Gluk (Kazan)
Допускаю (хотя верю в это с трудом), что при записи в лог транзакций теряется информация, необходимая для сопоставления строк inserted с соответствующими deleted и используемый в настоящий момент механизм сканирования лога не в состоянии построить updated, но кто мешал разработчикам использовать ДРУГОЙ формат лога, сохраняющий соответствие ? В конце концов эти строки порождены одним update !!!

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

Относительно full outer которым вы уже меня задрали шпынять, повторюсь. Во первых, первым про него заговорил не я, во вторых, как кроме outer join (left или right) вы предлагаете получать чистые inserted и deleted строки, без updated ??? И наверняка найдется разработчик, который стремясь свести все три набора воедино выполнит full outer (благо инструмент для downgrade-а производительности любезно предоставлен Microsoft)

И наверняка найдется разработчик который после delete забудет where написать. И что теперь - delete убирать?
Gluk (Kazan)

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

Для MS сканирование лога - это увеличение производительности, кроме этого лог используется и для репликаций. Да и потом на таблицы, которые предпологается массово апдейтить триггеры обычно не пишут, так что inserted и deleted обычно мало записей.
24 июл 07, 11:07    [4427281]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

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

Я не вам задавал вопрос, но за ответы спасибо.
Надеюсь тереть будете обоюдно ???
24 июл 07, 11:16    [4427364]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
относительно разруливания мутаций, уверен ВЫ сами прекрасно все знаете
24 июл 07, 11:18    [4427386]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Gluk (Kazan)


Что же касается вопросов ПО СУЩЕСТВУ, гражданин Соврамши, вопрос БЫЛ задан (и на него был получен ответ), но ВЫ сочли для себя удобным про это забыть. Видите-ли, так уж меня учили, что корректность алгоритма более приоритетна чем его быстродействие (быстро выданный некорректный ответ не имеет практической ценности). По этой причине, ваша арифметическая дуэль была для меня малоинтересна.

Повторю вопрос, коль ВЫ забыли:

Как в триггере определить множество updated-строк в случае если изменялосб значение PK (в общем случае, при отсутствии других ключей) ???




По существу обсуждалось два вопроса, инициированные двумя высказываниями:

softwarer



Что касается приделать inserted/deleted - по архитектуре Oracle это тривиальнейшая доработка, всего лишь заполнение коллекции rowid параллельно и так осуществляемым операциям. Ее трудоемкость вместе с тестированием - максимум человеконеделя (собственно, час-два на доработку, остальное именно что тестирование).



softwarer




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


Далее:


Gluk (Kazan)




как кроме outer join (left или right) вы предлагаете получать чистые inserted и deleted строки, без updated ???





Этот вопрос я безусловно включаю в мой персональный список самых лишённых смысла фраз.

Ответный вопрос:

Как с помощью outer join (left или right) вы предлагаете получать чистые inserted и deleted строки, без updated ???

Сообщение было отредактировано: 24 июл 07, 12:27
24 июл 07, 11:39    [4427553]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Все еще ожидаю ответ на поставленный МНОЙ вопрос от гражданина drev.
24 июл 07, 11:50    [4427626]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Gluk (Kazan)
Все еще ожидаю ответ на поставленный МНОЙ вопрос от гражданина drev.


Какой?
24 июл 07, 12:16    [4427817]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
drev
Gluk (Kazan)
Все еще ожидаю ответ на поставленный МНОЙ вопрос от гражданина drev.


Какой?

Как в триггере построить список updated строк в случае если изменялся PK и отсутствуют другие ключи ?

Сообщение было отредактировано: 24 июл 07, 12:30
24 июл 07, 12:26    [4427914]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Gluk (Kazan)
drev
Gluk (Kazan)
Все еще ожидаю ответ на поставленный МНОЙ вопрос от гражданина drev.


Какой?

Как в триггере построить список updated строк в случае если изменялся PK и отсутствуют другие ключи ?


Вам уже отвечали, в общем случае - никак.

Ни в одной из разработанных мною баз такой необходимости не возникало. Более того - у прикладного программиста и возможности.


P.S. Все еще ожидаю ответ на поставленный МНОЙ вопрос.
24 июл 07, 12:37    [4428007]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
drev
Вам уже отвечали, в общем случае - никак.


ВО !!! и какой смысл в таком случае в арифметических изысканиях ???

drev
Вам уже отвечали, в общем случае - никак.
Все еще ожидаю ответ на поставленный МНОЙ вопрос.


Ok, вроде осознал. Либо inserted и deleted заполнены данными по тем-же строкам, либо заполнена только одна из них. Так ?

Просто в Oracle DML-и бывают несколько махровее, merge к примеру
24 июл 07, 12:43    [4428060]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
Как в триггере построить список updated строк в случае если изменялся PK и отсутствуют другие ключи ?


Давайте я перефразирую Ваш вопрос? Как проапдэйтить именно эту строчку в таблице, если в ней нет PK и отсутствуют другие ключи? Ответ - никак. Если нет какого-либо другого уникального идентификатора. И это не зависит - триггер это или нет. Oracle предоставляет разработчику такой идентификатор, MS SQL нет, возлагая вопросы "правильной" архитектуры хранилиша на разработчика.
24 июл 07, 12:44    [4428069]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

Gluk (Kazan) wrote:
> Просто в Oracle DML-и бывают несколько махровее, merge к примеру
В катмае - тоже бывают, но он пока что - ctp.

Posted via ActualForum NNTP Server 1.4

24 июл 07, 12:49    [4428125]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Gluk (Kazan)



drev
Все еще ожидаю ответ на поставленный МНОЙ вопрос.


Ok, вроде осознал. Либо inserted и deleted заполнены данными по тем-же строкам, либо заполнена только одна из них. Так ?

Просто в Oracle DML-и бывают несколько махровее, merge к примеру


так.

Но это лишь первая половина. Я вообще не понимаю, причём здесь outer join? NOT EXISTS - понял бы. MINUS - понял бы.

Вы не могли бы привести пример скрипта?
24 июл 07, 12:56    [4428186]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)

Просто в Oracle DML-и бывают несколько махровее, merge к примеру


И что?! В 2008 тоже есть (будет ;)) MERGE. Но таблицы updated при этом не появилось! Да и на кой, если на соответствующую кляузу в MERGE сработает соответвующий триггер с заполнением соответвующих таблиц. Хотите написать один триггер на INSERT, UPDATE, DELETE? Не вопрос - он сработает три раза на MERGE, если там будет все три действия.
24 июл 07, 12:59    [4428204]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 122116
pkarklin
Gluk (Kazan)

Просто в Oracle DML-и бывают несколько махровее, merge к примеру


И что?! В 2008 тоже есть (будет ;)) MERGE. Но таблицы updated при этом не появилось! Да и на кой, если на соответствующую кляузу в MERGE сработает соответвующий триггер с заполнением соответвующих таблиц. Хотите написать один триггер на INSERT, UPDATE, DELETE? Не вопрос - он сработает три раза на MERGE, если там будет все три действия.


Кстати в Oracle триггеры работают точно так же - по кляузам MERGE ...
24 июл 07, 13:04    [4428232]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
dmidek
Кстати в Oracle триггеры работают точно так же - по кляузам MERGE ...


В таком случаи я отказываюсь понимать высказывание Gluk (Kazan) про MERGE в Oracle. %)
24 июл 07, 13:13    [4428288]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
SergSuper
Мне кажется что вы (участники спора) зря не разделили концепцию СУБД и вопросы реализации.
Вроде выяснили что с точки зрения реализации раздельные inserted и deleted лучше. Но мне кажется что реализация вторична (до определённых пределов, конечно). Главное придерживаться единой концепции системы.
При updated мы имеем отсутствие лишнего join-а, но также имеем не очень понятную ситуацию с дублированными именами полей. Т.е. помимо нового слова updated в конструкцию языка (или СУБД) надо еще вводить какие-то конструкции для разруливания дублированных имён.
На мой взгляд лучше уж тогда inserted и deleted, но это чисто с моей эстетической точки зрения.
.


1. Там, вообще говоря, неявный join будет присутствовать И затраты на выемку не нужной информации в случае, если нужны только inserted - тоже.

2. С эстетической точки зрения всё ещё хуже. В ввиду того, что таблица inserted в случае UPDATE в предложенной модели - пуста, в случае триггера на INSERT, UPDATE

вместо

select id, quantity
from inserted


Придётся писать что-нибудь вроде

select id, quantity
from 
(
select id, quantity
from inserted
union all
select new_id, new_quantity
from updated) ins_upd

Т.к у таблиц inserted, updated - разная структура.
24 июл 07, 13:20    [4428338]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

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

Просто в Oracle DML-и бывают несколько махровее, merge к примеру


И что?! В 2008 тоже есть (будет ;)) MERGE. Но таблицы updated при этом не появилось! Да и на кой, если на соответствующую кляузу в MERGE сработает соответвующий триггер с заполнением соответвующих таблиц. Хотите написать один триггер на INSERT, UPDATE, DELETE? Не вопрос - он сработает три раза на MERGE, если там будет все три действия.


Ага, в триггере на insert в этом в inserted случае будут только вставленные записи
а в триггере на update только измененные ??? (или все-таки и те и другие)

2 drev

outer join или not exists это уже дело вкуса (учитывая то что я недостаточно хорошо знаком с оптимизатором MS SQL, чтобы оценивать влияние того и другого на производительность тем более в столь экзотическом случае работы с псевдотаблицами, полученными сканированием лога).
24 июл 07, 13:28    [4428404]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
А вместо


select id, quantity, new_quantity
from inserted
Придётся писать что-нибудь вроде


select id, quantity, new_quantity
from 
(
select id, quantity, new_quantity from inserted
union all
select new_id, new_quantity, new_new_quantity
from updated) ins_upd


Что - ещё смешнее:)
24 июл 07, 13:30    [4428422]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
Ага, в триггере на insert в этом в inserted случае будут только вставленные записи
а в триггере на update только измененные ??? (или все-таки и те и другие)


Поведение триггеров в MS SQL от введения MERGE ничуть не изменилось. Как мне казалось, я уже писАл:

pkarklin
на соответствующую кляузу в MERGE сработает соответcnвующий триггер с заполнением соответвующих таблиц.


Поэтому, как минимум, странно ожидать наличия в таблице inserted в триггере, который сработал на кляузу UPDATE, еще и записей от кляузы INSERT.
24 июл 07, 13:33    [4428452]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Поэтому, как минимум, странно ожидать наличия в таблице inserted в триггере, который сработал на кляузу UPDATE, еще и записей от кляузы INSERT.


Странно, но можно. Проверить можно опытным путем либо дав ссылку на документацию
24 июл 07, 13:38    [4428494]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 122116
Gluk (Kazan)
2 drev

outer join или not exists это уже дело вкуса (учитывая то что я недостаточно хорошо знаком с оптимизатором MS SQL, чтобы оценивать влияние того и другого на производительность тем более в столь экзотическом случае работы с псевдотаблицами, полученными сканированием лога).


Сложно искать по контексту дискуссии, но мне кажется Вы имеете в виду такой вариант
использования outer join (в oracle- синтаксисе)

SELECT a.* from a,b
WHERE a.id = b.id(+)
AND b.id is null

Это также вполне возможный вариант поиска отсутствующих записей ...
24 июл 07, 13:40    [4428509]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
outer join или not exists это уже дело вкуса (учитывая то что я недостаточно хорошо знаком с оптимизатором MS SQL, чтобы оценивать влияние того и другого на производительность тем более в столь экзотическом случае работы с псевдотаблицами, полученными сканированием лога).


1. Каким бы экзотическими не были случаи лог "просканировался" (как страшно звучит "просканировать" брр..., учитывая что это текущая транзакция и в большинстве случаев страницы лог файла все в кэше) и они (таблицы) уже созданы. М.б. уже довольно об этом?
2. EXIST\NOT EXIST будет "легче", чем джоин, ибо сервер проверяет только факт наличия записи. Хотя, опять же, для таблиц в памяти - разница будет мизерной.
24 июл 07, 13:42    [4428533]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
dmidek
Сложно искать по контексту дискуссии, но мне кажется Вы имеете в виду такой вариант
использования outer join (в oracle- синтаксисе)

SELECT a.* from a,b
WHERE a.id = b.id(+)
AND b.id is null

Это также вполне возможный вариант поиска отсутствующих записей ...


да, я говорил об этом
24 июл 07, 13:43    [4428539]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Yo.!
Guest
pkarklin

1. Каким бы экзотическими не были случаи лог "просканировался" (как страшно звучит "просканировать" брр..., учитывая что это текущая транзакция и в большинстве случаев страницы лог файла все в кэше) и они (таблицы) уже созданы. М.б. уже довольно об этом?

а можно для тех кто не понял: у меня сотни конкурентных юзеров, со скоростью 50 tpc что то пишут в транзакшен лог размером 20Gb, что у меня
1) что за страницы гарантированы мне в кеше ?
2) если в кеше не все страницы как далеко мне нужно прочесать 20 гигобайтовый лог, чтоб гарантировано построить inserted&updated таблички ?
24 июл 07, 13:48    [4428602]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
2. EXIST\NOT EXIST будет "легче", чем джоин, ибо сервер проверяет только факт наличия записи.


Ага, для каждой строки другой таблицы
24 июл 07, 13:51    [4428631]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 12 13 14 15 16 [17] 18 19 20 21 .. 24   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить