Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
Кидман Garya Пример: В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером).В исходном состоянии A=1; B=2. На версионнике одновременно запускаются две транзакции. Одна пытается присвоить A:=5, другая пытается присвоить B:=5. Я хоть и не спец в версионниках, но уверен, что вторая транзакция обламается или сразу, или после коммита первой - в зависимости от настроек (это касается Интербейза и Фаейрбёрда). Garya В каждой из этих транзакций считываются значения A и B ДО их запуска. Срабатывает триггер в транзакции №1 и проверяет (А=5) != (B=2) - значит изменение A разрешено. Срабатывает триггер в транзакции №2 и проверяет (A=1) != (B=5) - значит изменение B тоже разрешено. Обе транзакции сохраняют новые значения A и B и закомичивают свои транзакции, новые версии A=5 и B=5 сохраняются в базе данных, нарушив согласованность данных. Этого не может быть, откуда Вы это взяли? Не поверите, но дело обстоит именно так, как расписал уважаемый Garya. Для версионников при таких требованиях к целостности нужно самому создавать "точку" синхронизации, которую обязаны пройти все транзакции (аналог критической секции или семафора в многопоточном программировании). Это может быть фальшивое обновление строчки в другой таблице, модификация вспомогательной таблицы, на худой конец - блокирование всей таблицы A или B до конца транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 05:16 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
авторПример: В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером). В исходном состоянии A=1; B=2. возникает вопрос. если существует взаимосвязь столбцов, то почему для контроля целостности выбран триггер, а не check constraint на таблицу? По-моему дальше можно не продолжать рассматривать этот "пример". авторОбе транзакции сохраняют новые значения A и B и закомичивают свои транзакции Вопрос - по очереди? Да. В этом случае будет несогласованность, см. выше. Триггер работает в контексте транзакции, соответственно видит данные только в том виде, в котором позволяет уровень изолированности. авторТакая ситуация не может произойти на блокировочнике. Вопрос - почему нет? триггеры в блокировочнике срабатывают по другому? триггеры игнорируют уровень изолированности транзакции, в которой они стартовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 10:57 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
Кстати, а почему бы интересующимся не прийти на Софтул на стенд фирмы ANSOFT, и посмотреть как там работает ERP AVARDA на Firebird? На 100-гиговой базе, и туче одновременных пользователей? http://www.ibase.ru/ansoft.html%5D%7C>]http://www.ibase.ru/ansoft.html]|> http://www.ibase.ru/ansoft.html" TARGET="_blank">www.ibase.ru/ansoft.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 11:03 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
Кидман Garya, перебор даже в картах плох. Зачем рассуждать о том, чего не знаете? Garya, приношу свои извинения. Я невнимательно прочитал Ваш пост, не заметил, что речь идет о разных таблицах. З.Ы. Вспомнился случай, который произошел, если не ошибаюсь, у комментатора Озерова: "Блохин выходит один на один с вратарем! Удар! Г-О-О-Л!!! Нет, штанга. К тому же это был и не Блохин" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 11:18 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
kdvвозникает вопрос. если существует взаимосвязь столбцов, то почему для контроля целостности выбран триггер, а не check constraint на таблицу? По-моему дальше можно не продолжать рассматривать этот "пример".Этот "пример" выбран для простоты иллюстрации. Естественно, в данном конкретном случае можно использовать Check conctraint, то есть ситуации, в которых используются именно триггеры или хранимые процедуры (случается же такое иногда? :) ). Городить пример, в котором выкрутиться на Check невозможно, я не стал, полагая, что об этом и так все знают. Кидман...уверен, что вторая транзакция обламается или сразу, или после коммита первой...Как Вы себе представляете подобный "облом"? Мы говорим "commit", а получаем молчаливый "rollback"? Если возникает ошибка, то какая именно? "Одновременный доступ к данным запрещен настройками"? Или просто "internal error" с выпадением в осадок? :) Если ошибку можно обработать, то что должно стоять в конце обработчика, что-то вроде "commit commit" или "rollback commit"? :) Я готов допустить, что я чего-то недопонимаю или не знаю. Но я привожу примеры, иллюстрирующие свое понимание, либо даю ссылку на первоисточник. Из Вашего, Кидман, поста в стиле "Борист, ты не прав!", мне не удалось понять, в чем конкретно я не прав и почему. Либо проиллюстрируйте (опишите поведение приведенных в примере транзакций на версионнике), либо приведите ссылку на материал, из которого этого стало бы ясно. GaryaТакая ситуация не может произойти на блокировочнике.Поясню. Если "грязное чтение" разрешено, то либо Транзакция №1 узнает о том, что A стало равно B, либо Транзакция №2. И откатит транзакцию, запретив изменение своих данных. Так что "грязное чтение" может быть не только вредным, но и полезным... :) (перефразированная шутка Фоменко). Если "грязное чтение" запрещено, то одна транзакция окажется в ожидании завершения другой транзакции. Здесь может подстерегать совсем другая опасность - дедлок (когда Транзакция №1 и Транзакция №2 одновременно ожидают завершения друг друга). Но на блокировочнике действительно ситуация, когда A станет равно B помимо желания разработчиков, воспроизвестись в принципе не может. Кто не согласен - прошу проиллюстрировать на конкретном примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 13:31 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
Кидман Кидман Garya, перебор даже в картах плох. Зачем рассуждать о том, чего не знаете? Garya, приношу свои извинения. Я невнимательно прочитал Ваш пост, не заметил, что речь идет о разных таблицах. З.Ы. Вспомнился случай, который произошел, если не ошибаюсь, у комментатора Озерова: "Блохин выходит один на один с вратарем! Удар! Г-О-О-Л!!! Нет, штанга. К тому же это был и не Блохин" Ничего страшного, со всяким бывает... :) Вы тоже извините, если я Вас задел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 13:37 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
Товарищь а Вы знаете что dead-lock выдают и версионники, а не только блокировочники? :-) А ваш пример с триггероми просто не пройдёт на отдельных серверах (тотже Оракл пошлёт с мутирующими таблицами). Так чта... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 13:58 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
короче. все это классические аномалии искажения чтения или записи. читать тут: http://www.osp.ru/text/302/181466/ шайтан! osp.ru все испортил. как ссылки так и вторую часть статьи в 5-ом номере.... :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 15:40 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
извиняюсь, не дописал - это называется серия статей Лили Козленко под названием "Введение в управление транзакциями". 4 части. 2-ая, как я вижу, запорота на osp по кодировке. Найти ссылки на статьи можно поиском указанного названия на www.osp.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 15:43 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
olegloaТоварищь а Вы знаете что dead-lock выдают и версионникиДедлок возможен только при блокировке и ожидании ее завершения. Если блокировки нет, дедлок возникнуть не может. Идея "версионников" - избегать блокировок созданием локальных копий с некоторых участков информации. Тем не менее, реальные СУБД "в чистом виде" версионниками, как правило, не бывают. Обычно они до некоторой степени "блокировочники" - в особенности, если заданы уровни изоляции транзакций, которые без блокировок не достижимы. Говорить, что та или иная СУБД относится к тому или иному классу, видимо не совсем корректно. Можно говорить о том, что они "тяготеют" к тому или другому. Возможно, я не совсем корректно отнес IB к "чисто версионникам". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 16:20 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
2 All. Приношу извинения за то, что невольно увел тему обсуждения в другое русло. Предлагаю вернуться к обсуждению темы. Для тех, у кого есть желание продолжить обсуждение на тему "версионники/блокировочники", предлагаю продолжить его на форуме " Сравнение СУБД ". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 17:24 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
Garya2 All. Приношу извинения за то, что невольно увел тему обсуждения в другое русло. Предлагаю вернуться к обсуждению темы... Всем спасибо, просветили. Вот что значит зарыться в одной теме на несколько лет. До недавного времени пользовался серваком пионера отечественого учета "Финансы без проблем" По нынешним меркам тема вроде как не перспективная. Но вот базовая идея заложенная в основу до сих пор не дает успокоится. В двух словах: РСУБД как класс отсутствует. Все учетные регистры являют собой объекты(записи) заряжаемые в память при старте. Все динамические расчетные данные в том же виде. Сервак старенький, однопоточный модификация данных априори не требует транзакций. Автоактуализация решена до боли в сердце просто, в случае вмешательства в прошлое, откат на ближайший месяц и полный перерасчет всех и вся. Вроде не современно и гигабайтные объемы в память не влезут, но реактивность потрясает и снимает кучу головняка реализаторам приложений. Я себе подумал, может эта тематика как то получила развитие в нынешнем мире. Похоже все утопло в реляционках. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2006, 22:14 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
GaryaНу, не всё так просто. На самом деле каких-то существенных отличий между версионниками и блокировочниками нет. Ждет или не ждет блокировочник, может зависеть от уровня изоляции транзакий. Если "грязное чтение" разрешено, то он может и не ждать. С версионником - аналогично. Если версионник не ждет, значит он рискует получить несогласованные данные. ... Garya, например, версионник Oracle не ждет и не рискует получить несогласованные данные. Далее Ваш пример про таблицы не подтверждает Ваши слова, а только показывает, особенности работы СУБД. К чему этот пример? Да версионник Oracle может читать таблицу, которая в данный момент изменяется, и что? Чтобы сохранить целостость в Вашем примере, нужно просто заблокировать изменяемые стоки на время транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 06:13 |
|
||
|
Актуализация при вмешательстве в прошлое.
|
|||
|---|---|---|---|
|
#18+
SergeyVLGarya, например, версионник Oracle не ждет и не рискует получить несогласованные данные. ... Чтобы сохранить целостость в Вашем примере, нужно просто заблокировать изменяемые стоки на время транзакции.Во-первых, для начала, нужно ДОГАДАТЬСЯ это сделать. Во-вторых, Oracle - это не совсем версионник. Это помесь версионника с блокировочником. В-третьих, хочется продолжить дискуссию именно по этому вопросу, то я уже дал ссылку на форум, где это можно сделать. В этой теме это оффтоп. Специально создал там тему для желающих обсудить этот вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 09:22 |
|
||
|
|

start [/forum/topic.php?fid=29&msg=34011633&tid=1527922]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 262ms |
| total: | 512ms |

| 0 / 0 |
