Главная страница


su.dbms

 
 - SU.DBMS ----------------------------------------------------------------------
 From : Oleg Bokanov                         2:5020/400     25 Dec 2002  12:13:22
 To : Dmitry V. Liseev
 Subject : Re: Синхpонизация доступа к БД
 -------------------------------------------------------------------------------- 
 
 Hу ты бы хоть попробовал вначале, то о чем пишешь :(
 
 В тот момент, когда первый пользователь начнет транзакцию удаляющую папку,
 будет установлена блокировка.
 Когда второй пользователь попытается вставить новую папку, дочернюю к
 удаляемой будет осуществлена попытка блокировки родительской записи, которая
 уже заблокирована первым пользователем. В результате, транзакция второго
 пользователя будет ждать завершения транзакции удаляющей записи. Когда же
 эта транзакция завершится, то вторая не сможет выполнить вставку, так как не
 найдет родительскую запись, о чем и отрапортует тебе.
 "Dmitry V. Liseev" <dimik@infopro.spb.su> сообщил/сообщила в новостях
 следующее: news:auaesu$1bom$3@news.peterlink.ru...
 
 > Dmitri Zakharov <Dmitri.Zakharov@p53.f5.n5004.z2.fidonet.org> wrote in
 > message news:1040724356@p53.f5.n5004.z2.ftn...
 >
 > Hi!
 >
 > >  Поставь interbase 6 - дело одной минуты.
 > >  Создай базу данных с одной таблицей.
 > >  запусти 2 копии isql.
 > >  в одной меняй данные. (1)
 > >  В дpугой делай выбоpки. (2)
 > >  (Так вот в этом окне (2) не увидишь никаких изменений пока не выдашь
 > >  commit или rollback)
 > >  Дефолтный уpовень там - snapshot.
 >
 > С этим я поигрался. Проблема в том, что обычно
 > для выполнения некой функции сервер приложений
 > делает несколько запросов к серверу БД, из которых
 > часто сначала идет несколько SELECT'ов, на основе
 > прочитанных данных принимается решение, затем
 > идет несколько INSERT/UPDATE/DELET'ов. Это все
 > в одной транзакции происходит. В течение
 > этого процесса кто-то второй делает короткую
 > операцию над некими данными и делает commit.
 > Сервер БД в этот момент еще не знает, что первая
 > транзакция также собирается потом читать эти-же
 > данные. Соответственно он говорит второму, что его
 > транзакция успешно закоммичена. Когда СУБД выяснит,
 > что первая транзакция собирается читать эти-же данные,
 > ее продолжение станет бессмысленным, т.к. snapshot,
 > сделанный на момент начала первой транзакции уже
 > устарел и первая транзакция рискует принять решение
 > на основе устаревших данных. Жить становится интереснее,
 > когда данные не просто меняются, а появляются или
 > удаляются
 >
 > Предположим, есть некое дерево папок. То есть каждая
 > папка имеет FK, ссылающийся на родительскую папку.
 > Есть некий справочник информации, связанной с этими
 > папками (Таблица, где каждая запись имеет FK папки).
 > Первый пользователь запускает операцию удаления
 > папки, сервер приложений стартует транзакцию и начинает
 > рекурсивно удалять все вложенные папки и связанную
 > с ними информацию из справочников. Второй пользователь
 > пытается создать новую папку где-то в глубине иерархии.
 > Сервер приложений стартует для него транзакцию, добавляет
 > папку (ссылочная целостность не нарушается, т.к. родительская
 > папка для нее еще не удалена и СУБД еще не знает, что скоро
 > она будет удалена в первой транзакции, т.е. пересечение по
 > данным еще не возникло и нет оснований в отклонении
 > этой операции), и связанную с ней информацию в справочник.
 > Эта операция завершается успешно и коммитится.
 > После этого первая транзакция наконец-то добирается до
 > попытки удалить соответствующую родительскую папку,
 > в соответствии с идеологией snapshot и изоляции транзакций
 > она не может удалить вновь появившуюся дочернюю папку,
 > ибо не знает о ней и связанной с ней информации в справочнике,
 > т.к. на момент начала первой транзакции ее еще не было.
 > Hе удалять ее тоже нельзя, ибо при удалении родительской
 > папки возникнет нарушение ссылочной целостности. Единственный
 > выход - откатить первую транзакцию. То есть при выполнении
 > операции типа DELETE FROM Folder WHERE ParentFolder=544
 > должна каким-то образом возникнуть ошибка, чтобы сервер
 > приложений откатил всю транзакцию. Если операция завершиться
 > успешно, то либо вновь добавленная папка не будет удалена
 > с вытекающим нарушением целостности, либо она будет
 > обнаружена и удалена, но это будет означать, что в момент
 > проведения транзакции было учтено вовсе не то состояние
 > таблицы, которое было на момент ее начала.
 >
 > В таком случае получается, что этот snapshot должен помнить
 > не только какие данные были на момент начала транзакции,
 > но и каких данных еще небыло. Он что, полную копию всей
 > БД для каждой транзакции создает? А если внутри транзакции
 > не просто записи добавляются, а создаются или удаляются
 > целые таблицы, триггера или констрейны?
 >
 > Следуя подобной логике получается, что большое количество
 > коротких транзакций должны сделать ничтожно малой вероятность
 > успешного прохождения хоть и редких, но длинных транзакций.
 >
 > Единственный выход - иметь некий способ руками указать
 > блокируемые данные еще в самом начале транзакции
 > до фактического к ним обращения, чтобы еще в начале
 > длинной операции сервер точно знал, какие данные
 > потребуются в ее ходе, тогда короткие транзакции, которые
 > заявят блокировку этих-же данных, будут приостановлены.
 > ____________________________
 > С уважением, Лисеев Дмитрий.
 > http://private.peterlink.ru/dimik/
 > PGP key fingerprint: 09 28 74 28 6C 39 62 29   2E CB 95 03 4F 04 33 73
 >
 >
 --- ifmail v.2.15dev5
  * Origin: WEBPlus Ltd. (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Синхронизация доступа к БД   Dmitry V. Liseev   23 Dec 2002 21:20:17 
 Re: Синхронизация дос тупа к БД   Sergey Vlasov   23 Dec 2002 21:45:17 
 Re: Синхронизация дос тупа к БД   Sergey Prach   24 Dec 2002 02:07:46 
 Re: Синхронизация дос тупа к БД   Andrew Lesnichenko   24 Dec 2002 12:36:45 
 Re: Синхронизация дос тупа к БД   Sergey Prach   24 Dec 2002 16:27:17 
 Re: Синхронизация дос тупа к БД   Vladimir Pavlikov   24 Dec 2002 16:57:23 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   23 Dec 2002 22:32:36 
 Re: Синхронизация доступа к БД   Sergey Prach   24 Dec 2002 02:07:46 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   24 Dec 2002 17:16:44 
 Re: Синхронизация доступа к БД   Sergey Prach   25 Dec 2002 00:58:39 
 Re: Синхронизация доступа к БД   Dmitry Kuzmenko   26 Dec 2002 16:01:16 
 Re: Синхронизация доступа к БД   Oleg Bokanov   26 Dec 2002 16:31:01 
 Re: Синхронизация доступа к БД   Sergey Prach   26 Dec 2002 17:23:29 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 17:44:27 
 Re: Синхронизация доступа к БД   Dmitry Kuzmenko   26 Dec 2002 17:39:52 
 Re: Синхронизация доступа к БД   Sergey Prach   27 Dec 2002 03:16:01 
 Re: Синхронизация доступа к БД   Dmitry Kuzmenko   08 Jan 2003 15:13:39 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 18:44:25 
 Re: Синхронизация доступа к БД   Sergey Prach   27 Dec 2002 03:16:01 
 Re: Синхронизация доступа к БД   Dmitry Novikov   27 Dec 2002 14:18:44 
 Re: Синхронизация доступа к БД   Sergey Prach   27 Dec 2002 16:49:12 
 Re: Синхронизация доступа к БД   Ilya Zvyagin   27 Dec 2002 17:10:11 
 Re: Синхронизация доступа к БД   Dmitry Novikov   27 Dec 2002 17:35:43 
 Re: Синхронизация доступа к БД   Sergey Prach   28 Dec 2002 00:12:49 
 Re: Синхронизация доступа к БД   tengiz.kharatishvili   28 Dec 2002 02:21:31 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   04 Jan 2003 19:11:00 
 Re: Синхронизация доступа к БД   Sergey Prach   05 Jan 2003 01:29:32 
 Re: Синхронизация доступа к БД   Liliya Huff   05 Jan 2003 04:53:40 
 Re: Синхронизация доступа к БД   Sergey Prach   05 Jan 2003 14:10:14 
 Re: Синхронизация доступа к БД   Liliya Huff   06 Jan 2003 22:42:14 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   09 Jan 2003 19:27:13 
 Re: Синхронизация доступа к БД   Dmitry Kuzmenko   08 Jan 2003 14:40:44 
 Re: Синхронизация доступа к БД   Tolik Tentser   30 Dec 2002 20:16:04 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   04 Jan 2003 19:11:00 
 Re: Синхронизация доступа к БД   Tolik Tentser   04 Jan 2003 19:55:40 
 Re: Синхронизация доступа к БД   Ilya Zvyagin   25 Dec 2002 11:20:12 
 Re: Синхронизация доступа к БД   Dmitry Kuzmenko   26 Dec 2002 15:56:07 
 Re: Синхронизация доступа к БД   Ilya Zvyagin   27 Dec 2002 17:03:32 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 18:44:24 
 Re: Синхронизация доступа к БД   Liliya Huff   26 Dec 2002 20:29:23 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 20:56:05 
 Re: Синхронизация доступа к БД   Liliya Huff   26 Dec 2002 22:04:15 
 Re: Синхронизация доступа к БД   Sergey Prach   24 Dec 2002 02:07:41 
 Синхpонизация доступа к БД   Dmitri Zakharov   24 Dec 2002 11:00:57 
 Re: Синхpонизация доступа к БД   Dmitry V. Liseev   25 Dec 2002 00:11:40 
 Re: Синхpонизация доступа к БД   Oleg Bokanov   25 Dec 2002 12:13:22 
 Re: Синхpонизация доступа к БД   Sergey Prach   25 Dec 2002 12:39:06 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 17:44:26 
 Re: Синхpонизация доступа к БД   Oleg Bokanov   26 Dec 2002 18:21:05 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 20:01:48 
 Re: Синхpонизация доступа к БД   Oleg Bokanov   26 Dec 2002 20:30:25 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 20:56:04 
 Re: Синхpонизация доступа к БД   Oleg Bokanov   26 Dec 2002 21:52:59 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   04 Jan 2003 18:15:13 
 Re: Синхpонизация доступа к БД   Tolik Tentser   30 Dec 2002 20:27:44 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   04 Jan 2003 18:15:14 
 Re: Синхpонизация доступа к БД   Tolik Tentser   04 Jan 2003 20:15:03 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   04 Jan 2003 21:19:54 
 Re: Синхpонизация доступа к БД   Tolik Tentser   08 Jan 2003 20:10:44 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   09 Jan 2003 19:40:22 
 Re: Синхpонизация доступа к БД   Tolik Tentser   09 Jan 2003 20:32:32 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   10 Jan 2003 17:39:59 
 Re: Синхpонизация доступа к БД   Tolik Tentser   10 Jan 2003 19:53:45 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   13 Jan 2003 18:28:09 
 Re: Синхpонизация доступа к БД   Tolik Tentser   13 Jan 2003 20:19:36 
 Re: Синхpонизация доступа к БД   Artem Khomenko   14 Jan 2003 23:36:00 
 Re: Синхpонизация доступа к БД   Dankov   15 Jan 2003 16:19:21 
 Re: Синхpонизация доступа к БД   Vova Aksionov   05 Jan 2003 10:56:12 
 Re: Синхpонизация доступа к БД   Sergey Prach   05 Jan 2003 14:10:14 
 Re: Синхpонизация доступа к БД   Vova Aksionov   05 Jan 2003 14:34:10 
 Re: Синхpонизация доступа к БД   Tolik Tentser   08 Jan 2003 20:12:16 
 Re: Синхpонизация доступа к БД   Vova Aksionov   05 Jan 2003 10:52:38 
 Re: Синхpонизация доступа к БД   Vladimir Pavlikov   09 Jan 2003 19:27:12 
 Re: Синхронизация доступа к БД   Ilya Zvyagin   24 Dec 2002 10:56:07 
 Re: Синхронизация доступа к БД   Dmitry V. Liseev   25 Dec 2002 00:11:41 
 Синхpонизация доступа к БД   Dmitri Zakharov   25 Dec 2002 11:18:52 
 Re: Синхронизация доступа к БД   Ilya Zvyagin   25 Dec 2002 11:42:39 
 Re: Синхронизация доступа к БД   Vladimir Pavlikov   26 Dec 2002 18:44:24 
Архивное /su.dbms/1343187bb639d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional