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


su.dbms

 
 - SU.DBMS ----------------------------------------------------------------------
 From : Dmitry V. Liseev                     2:5020/400     25 Dec 2002  00:11:40
 To : Dmitri Zakharov
 Subject : Re: Синхpонизация доступа к БД
 -------------------------------------------------------------------------------- 
 
 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: Peterlink ISP News System (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/13852c4c24396.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional