|
|
su.dbms- SU.DBMS ---------------------------------------------------------------------- From : Vladimir Pavlikov 2:5020/400 09 Jan 2003 19:27:13 To : Sergey Prach Subject : Re: Синхронизация доступа к БД -------------------------------------------------------------------------------- Hello, Sergey Prach! You wrote to Vladimir Pavlikov on Sat, 4 Jan 2003 21:29:32 +0000 (UTC): >> Откатись по треду : операция всегда в одной транзакции, много опера- >> ций _желательно_ не пихать все в одну транзакцию. Т.е. речь о разном >> - >> никаких поглощений. SP> Володя, а ты знаешь откуда появился сам термин - транзакция? SP> Этому термину столько, сколько банковскому делу. Изначально он Слово "брак" тоже имеет не одно значение. Речь же о конкретном. SP> любая оперция, которая требует перноса SP> некоего значения и соблюдения целостности состояния системы, должна SP> быть выполнена в рамках одной транзакции и требует двух операций - SP> снятия значения и уменьшения в одном месте, и приращения в другом. Это и есть одна операция, неразрывная в предметной области - я имел ввиду именно ее. SP> Это просто компьютерщики опустили понятие транзакции до SP> одиночного SQL-оператора. Hо мы же не они? Я, по крайней мере. Впрочем, на "компьютерщиков" ты клевещешь - все б.м. выше нулевого уровня знают, что в транзакции можно прогнать уйму SQL-предложений. То, что так делать не нужно - знают меньше, а речь именно об этом. SP> Привожу пример, T1 и T1 - 1 -я и 2-я транзакции, r(x) - чтение SP> записи x, w(x)-изменения состояния записи x: SP> 1. T1: start; w(x=d1); SP> 2. T2: start; w(y=d2); commit; SP> 3. T3: r(y=?);w(y=d3);commit; SP> Указанная последовательность (а в ней действительно нет ничего SP> криминального) не нарушает ни одно из классических определений SP> феноменов. SP> Hо, как уже было правильно подмечено, что у версионников версии SP> данных должны соответствовать значениям, на момент начала SP> траназкции. Так вот вопрос, что прочитает T1 из записи y - значение SP> на момент старта T1 или закомиченное значение T2? А теперь объясни в Ты имеешь ввиду не Т1, а Т3, полагаю? Разумеется, закомиченное d2 - старт _другой_ транзакции к ней отношения не имеет. Если же в тексте ошибка и в последнем пункте речь идет именно о Т1 - зависит от уровня изоляции (как-то ты странно "слона" пропустил). Если RC - то же самое, если snapshot - d1. Естественно, т.к. для нее база "заморожена". Окончательное значение записи, вне зависимости от уровней, будет d3. SP> чем суть уровня snapshot, дословный перевод которого - моментальный SP> снимок. Тут без сюрпризов - в точности с переводом. Иллюстрация - выше. Дима, по-моему, уже писал, но - повторюсь. Сам старт snapshot не делает _ничего_, никаких допкопий. И, если даже такую транзакцию держать полдня, но при этом ни одной модификации параллельно не было - не появится ни одной версии. Если же модификации есть, их "устаревшие" версии будут удерживаться до завершения snapshot- транзакции, чтобы иметь возможность дать ей данные на момент ее старта. После завершения они становятся "мусором", подлежащим "уборке". Как (и кто) их удалит - зависит от реализаций. Все же остальные, более поздние транзакции будут получать самую свежую закоммиченную версию. --------------------------------------------- Владимир Павликов. -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: Talk.Mail.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms/6488e84e66c7.html, оценка из 5, голосов 10
|