![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
frozer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 18.3.2008 Где: Волгоград Репутация: 1 Всего: 1 |
Как в приложении с одним постоянно открытым соединением к базе (Firebird) сделать "длинную" транзакцию, во время которой будут отрабатывать другие. Проблема в том, что адонетовское соединение не позволяет выполнять параллельные транзакции. Можно ли выкрутиться, используя только одно соединение?
Это сообщение отредактировал(а) frozer - 18.3.2008, 22:55 |
|||
|
||||
Veitmen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
||||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 4 Всего: 149 |
frozer, в данном случае разбивают длинную (бизнес) транзакцию на несколько маленьких (системных) транзакций.
Чтобы данные между системными транзакциями не потеряли актуальность применяют автономную блокировку (АБ). Различают оптимистическую и пессимистическую АБ. Оптимистическая: Условия применения: вероятность конфликта мала (либо длинна бизнес-транзакции мала, либо данные врятли понадобятся кому-то еще). Реализация: перед выполнением очередной системной транзакции проверяется не изменились ли данные другой транзакцией. Если изменились транзакция завершается и юзеру выкидывается ошибка с просьбой начать сначала. Для определения изменились ли данные к объекту в базе данных добавляют новое поле: время последнего изменения либо версию объекта (увеличивается после каждого изменения). Пессимистическая: Условия применения: вероятность конфликта высока (либо длинна бизнес-транзакции велика, либо высокая конкуренция на доступ). Реализация: В начале бизнес транцакции данные ей необходимо заблокировать (для этого, например, используют специальную таблицу блокировок). В конце транзакции блокировку снимают. Реализация оптиместической блокаровки проста и не требует много знаний и внимания, пессимистическая же требует и того и другого. Поэтому в большинстве случаев рекомендуют использовать первую, и только в крайних случаях вторую. Существует еще и смешанная блокировка: оптимистическая на чтение и пессимистическая на запись. |
|||
|
||||
frozer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 18.3.2008 Где: Волгоград Репутация: 1 Всего: 1 |
Спасибо за ссылки, хотя они больше по теме распределенных транзакций ![]() Огромное спасибо. Буду думать как это реализовать... |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 4 Всего: 149 |
frozer, не за что. Да и думать ничего не надо -- все уже давно придумано и описано:
http://www.codeproject.com/KB/dotnet/OptLo...refixTable.aspx http://www.codeproject.com/KB/aspnet/Concu...cy_Control.aspx http://www.codeproject.com/KB/vista/Data_Concurrency.aspx http://www.codeproject.com/KB/database/concurmodel.aspx Если в двух словах, то update строки тоблицы выглядит так
А потом смотрят сколько записей обновилось (update возвращает количество измененных записей). Если 1 -- все ОК, 0 -- версия изменилась -- эксцепшен -- сообщение пользователю. |
|||
|
||||
frozer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 18.3.2008 Где: Волгоград Репутация: 1 Всего: 1 |
еще раз спасибо
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 4 Всего: 149 |
frozer, еще раз не за что ;-)
Это сообщение отредактировал(а) ivashkanet - 22.3.2008, 21:10 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |