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

Откуда: Сидней
Сообщений: 2219
locky
Кудряшка,

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


Вот и я о том же в этом топике изначально говорю! :)

locky

Впрочем это лирика и дело вкуса.


Согласна :)
27 май 09, 14:36    [7234857]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Bogdanov Andrey
Еще раз повторяю, что в вашем решении serializable висит на всей транзакции и ожиданием будут заниматься не только создание новых товаров, но и многие другие операции.


Я эточо не говорила. Воспользуйтесь хинтом для конкретного ресурса.
27 май 09, 14:37    [7234868]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Кудряшка
Я эточо не говорила. Воспользуйтесь хинтом для конкретного ресурса.
Ну я MSSQL-ских примочек не знаю. Что значит "хинт для конкретного ресурса". Во всех стандартах уровень изоляции для целых транзакций выставляется.
27 май 09, 14:41    [7234906]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
softwarer
Угу, когда я этим занимался, я тоже думал, что каждая запись - караул. А когда пришёл в хранилища, обнаружил, что общие цифры гораздо важнее, и задержать важную информацию из-за того, что цифра на 0.1% ошибочна - мягко говоря, глупость. Куда разумнее сначала закачать, а потом исправить.


Есть бизнес-логика. Если она позволяет не записать пол-миллиона, а пол-миллиона записать, то и ладно. Делаем проверку и вперед. Хоть с флагом, хоть с чем.

Изначально говорилось и сейчас говорится бо ошибке, ошибка - это ошибка, exception.
27 май 09, 14:43    [7234917]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Bogdanov Andrey
Кудряшка
Я эточо не говорила. Воспользуйтесь хинтом для конкретного ресурса.
Ну я MSSQL-ских примочек не знаю. Что значит "хинт для конкретного ресурса". Во всех стандартах уровень изоляции для целых транзакций выставляется.


Люди, кто Ораклом занимается, обьясните Андрею, что такое хинт блокировки.
А я пойду поем уже...
27 май 09, 14:44    [7234929]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Кудряшка
ошибка - это ошибка, exception.
А вот тут вы напрасно путаете. Ошибка - это ошибка, а exception - это exception, это такой механизм некоторых языков программирования, позволяющий управлять ходом выполнения.
А вы вот этого "управлять" упорно замечать не хотите. И все управление сводите к единственной возможности - rollback.
27 май 09, 14:46    [7234956]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Bogdanov Andrey
Кудряшка
Я эточо не говорила. Воспользуйтесь хинтом для конкретного ресурса.
Ну я MSSQL-ских примочек не знаю. Что значит "хинт для конкретного ресурса". Во всех стандартах уровень изоляции для целых транзакций выставляется.

http://msdn.microsoft.com/en-us/library/ms187373.aspx, см. TABLOCK.

ЗЫ. А что Вы кроме Оракла знаете?
27 май 09, 14:47    [7234960]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Кудряшка
Люди, кто Ораклом занимается, обьясните Андрею, что такое хинт блокировки.
Так вы оказывается хинты блокировки с уровнями изоляции путаете?
В прошлый раз вы об уровне изоляции говорили.
27 май 09, 14:49    [7234983]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Кудряшка
Да я не против...
Изначально было вот что

автор softwarer
Угу. Вот идёт, например, ETL на скромный такой 1'000'000 записей. На 990'000-й возникла ошибка


Отсюда и плясали. Я сказала что каждая запись д.б. в своей транзакции.


В результате чего, массовая загрузка при нашей жизни не завершится
Вы не обижайтесь, но хоз деятельность хоз.деятельностью, а в биллинге бывает и другая специфика (данных на пару порядков больше в отдельных таблицах)
27 май 09, 14:50    [7234996]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Gluk (Kazan)
Кудряшка
Да я не против...
Изначально было вот что

автор softwarer
Угу. Вот идёт, например, ETL на скромный такой 1'000'000 записей. На 990'000-й возникла ошибка


Отсюда и плясали. Я сказала что каждая запись д.б. в своей транзакции.


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


Да знаю я что такое массовая загрузка:)

П.С.: Вы мои сообщения читаете? Прочитайте внимательно, что я написала softwarer в последнем посте.
27 май 09, 15:14    [7235177]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Bogdanov Andrey
А вы вот этого "управлять" упорно замечать не хотите. И все управление сводите к единственной возможности - rollback.


У меня все сводится к программированию без ОШИБОК. Если Вы не знаете, как сделать проверку и вам сервер выдает ошибки о нарушении PK, которые вы пропускаете потому, что Вы не знаете, как сделать - это еще не значит, ЧТО ТАК И НАДО.
27 май 09, 15:19    [7235218]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
pkarklin
И так мы создали "защиту целостности", которая должна исключить факт появления дубля, исходя из чего? Из того, полагаю, что дубли таки не должны появится.

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

pkarklin
И заливку организовали простым INSERT ... SELECT ....

Не факт, совершенно. Она может включать в себя INSERT .. SELECT, но редко когда всё настолько просто. Более характерны такие навёрнутые запросы, что "глазами" голову сломаешь, да ещё куча хранимок, выполняющих отдельные операции.

pkarklin
Какие у нас варианты? Как мне казалось, самым простым, изменить заливку с INSERT ... SELECT... на нечто более сложное, например, MERGE, взводя флаг ошибки для вставляемых записей,

Ну MERGE тут совсем не в кассу. Он ещё и испортит правильную запись.

pkarklin
К чему это я. К примеру об "ошибках в транзакциях" и их "пропусках", что на самом деле, таки сводится к изменению самой "транзакции", т.е. способа обработки данных в описанной выше ситуации.

Мм... попробую сформулировать так. "Нормально" транзакция должна содержать сколько-то последовательных действий и сколько-то проверок. Теоретически возможно перед выполнением первого действия просчитать результаты всех проверок, не выполняя действий, и на этом основании "сразу отбить" или "принять гарантированно безошибочно". На практике же - это может быть весьма затруднительно, и скорее всего будет очень медленно. Поэтому в ситуации, когда часть действий уже сделана, и проверка сказала "плохо", тупо откатывать - не годится. Откатывать следует только в случае фатальных ошибок (на которые нет хорошей стратегии восстановления) либо неожиданных (на которые мы стратегию не предусмотрели).
27 май 09, 15:22    [7235245]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Gluk (Kazan)
Вы не обижайтесь, но хоз деятельность хоз.деятельностью, а в биллинге бывает и другая специфика (данных на пару порядков больше в отдельных таблицах)


Вы не обижайтесь, но читать сообщения других тоже иногда надо... ну что за несправедливость :(

Если идет пакетная вставка и лезет ошибка (не логическая, а от сервера!) - вы уже ничего не сделаете! Не вставится оно. Данные надо разделить, проверив.

Если подготовленные и проверенные данные опать вставляются с ошибкой - то ROLLABCK (потому что все проверили вроде, и произошло что-то неожидаемое), потому что вы эти данные вставите, а они будут очень кривые, а чистить потом базу как? руками?

Опять пошло по кругу.
27 май 09, 15:25    [7235258]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Кудряшка
У меня все сводится к программированию без ОШИБОК. Если Вы не знаете, как сделать проверку и вам сервер выдает ошибки о нарушении PK, которые вы пропускаете потому, что Вы не знаете, как сделать - это еще не значит, ЧТО ТАК И НАДО.

У вас проверка целостности спрятана в триггере (или в ограничении). Для того, чтобы сделать "как надо" вы дублируете эту проверку в прикладном коде для того, чтобы потом все прошло нормально. И вы считаете, что такое дублирование логики - это так как надо?
Советую ознакомиться с историей развития языков программирования и с тем, для чего придуман механизм exception. А также могу посоветтовать написать хоть что-то работающее на чистом C (где exception нету). Никто не спорит без этого писать можно, но это уже вчерашний век.
27 май 09, 15:26    [7235270]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Владимир Смирнов
Member

Откуда: Северодвинск
Сообщений: 136
Кудряшка,

Для большинства россиян (программистов в том числе) слово "никогда" означает (с учётом специфики билинга и т.п.) "никогда, кроме случаев когда очень нужно".
Отсюда и большинство рассуждений про транзакции, ограничения, бизнес-логику ...
То есть изначально объявляется некое правило без исключений. Потом, по ходу дела, возникают неявные допущения. Ну, типа, "так надо".
27 май 09, 15:27    [7235275]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Кудряшка
Bogdanov Andrey
А вы вот этого "управлять" упорно замечать не хотите. И все управление сводите к единственной возможности - rollback.


У меня все сводится к программированию без ОШИБОК. Если Вы не знаете, как сделать проверку и вам сервер выдает ошибки о нарушении PK, которые вы пропускаете потому, что Вы не знаете, как сделать - это еще не значит, ЧТО ТАК И НАДО.


Дык и Вам уже надцать раз говорилось, что не надо путать exception-ы c транзакциями
27 май 09, 15:40    [7235364]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Gluk (Kazan)
У меня все сводится к программированию без ОШИБОК. Если Вы не знаете, как сделать проверку и вам сервер выдает ошибки о нарушении PK, которые вы пропускаете потому, что Вы не знаете, как сделать - это еще не значит, ЧТО ТАК И НАДО.


Дык и Вам уже надцать раз говорилось, что не надо путать exception-ы c транзакциями[/quot]

Простите, но это к чему сейчас было?
27 май 09, 15:43    [7235384]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

Gluk (Kazan) wrote:

> дополню:
>
> 5. rollback вложенной транзакции не должен откатывать основную транзакцию

Вот ключевой момент, между прочим. Не все СУБД это умеют делать.
В некторых откат может быть только целиком.

Posted via ActualForum NNTP Server 1.4

27 май 09, 15:51    [7235466]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Кудряшка
Gluk (Kazan)
Дык и Вам уже надцать раз говорилось, что не надо путать exception-ы c транзакциями


Простите, но это к чему сейчас было?
К тому, что exception - это сигнализация об ошибках времени выполнения и способов обработки ошибок может быть множество. Транзакции здесь абсолютно не причем.
Вы же упорно предлагаете считать, что единственный вариант реакции на ошибки это откат транзакции.
27 май 09, 16:08    [7235607]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Брррррр

Какая склока.

А потом удивляемся почему политики не могут договориться ...
Раз уж программеры в терминологии не помиряться
27 май 09, 17:02    [7236075]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
martin_bishop
Раз уж программеры в терминологии не помиряться

Вы когда нибудь пробовали пасти стадо кошек?
27 май 09, 17:24    [7236260]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
SQLMantis
Member

Откуда: Москва
Сообщений: 240
martin_bishop
Брррррр

Какая склока.

А потом удивляемся почему политики не могут договориться ...
Раз уж программеры в терминологии не помиряться


А все начиналось с такого простого и логичного...гыгы отката транзакции в триггере :)
27 май 09, 17:33    [7236324]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

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

martin_bishop

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

Правильно ли это?

Формально говоря - правильно.
Не вижу аргументов почему?

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

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

Именно это я и считаю неправильным.

Далее ...

Я уж было почти согласился с тем, что
Gluk (Kazan)
не надо путать exception-ы c транзакциями
Но мне не даёт покоя один момент:

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

Теперь второй вопрос:

Правильно ли это?
27 май 09, 17:34    [7236334]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
martin_bishop
Представьте себе, для простоты, что есть три таблицы и я могу взять некую сущность (уменьшить остаток на 1) из любой из них, по принципу: если нет в первой, бери во второй и т.д.
Каждый из местечковых князьков (простите,
автор
триггеров
) считает, что:
-1 это возмутительно! Казнить негодную (транзакцию)!

Теперь второй вопрос:

автор
Правильно ли это
?


Конечно, неправильно. И неправильно написан триггер, т.е. заложенная в него логика не соответствует реалиям "если нет в первой, бери во второй и т.д.". Самое простое, то выкинуть все триггера из всех таблиц, и вынести обрабоку на "верхний слой". Но это пагубно, как я уже неоднократно здесь заявлял, с той точки зрения, что каждый из "верхних слоев" должен уметь обрабатывать такую ситуацию. С моей точки зрения, правильнее будет привести ограничения в бд (нижний слой) в соответствие с реалиями.
27 май 09, 17:42    [7236376]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Спасибо pkarklin
27 май 09, 17:45    [7236394]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 13 14 15 16 17 [18] 19 20 21 22 .. 25   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить