powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Транзакции. Вопрос к людям с ОР
11 сообщений из 36, страница 2 из 2
Транзакции. Вопрос к людям с ОР
    #32827326
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
traktor123

Для подобных транзакций есть даже название - long running application transaction. Самое лучшее решение - это оптимистическая блокировка с версионностью.
Т.е. во-первых оптимистическая блокировка - это когда данные в БД будут блокироваться только на период их непосредственной модификации.
Во-вторых версионность тем либо иным способом - проще всего с помощью timestamp колонки. Она нужна так как в отличие от пессимистической блокировки (ваш вариант №2) блокировка на прочитанные ресурсы в начале транзакции ставиться не будет и перед модификацией данных стоит сначала проверить не изменил ли их кто-нибудь до вас.

Если же это решение по тем или иным соображениям не подходит - то тогда вариант 2 - но только в крайнем случае.
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32827454
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55 traktor123
2. insert, update, delete - блокируют для записи те строки, которые попадают в их условие отбора ???

2. Да


tru55, Вы имели в виду какую-то определённую СУБД?
потому что в MS SQL 2k блокируется целая страница (несколько записей), а иногда и целая таблица.
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32827463
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov
tru55, Вы имели в виду какую-то определённую СУБД?
потому что в MS SQL 2k блокируется целая страница (несколько записей), а иногда и целая таблица.

Перед первым моим ответом traktor123 упомянул Oracle, соответственно и ответы по нему
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32827503
traktor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri traktor123

Для подобных транзакций есть даже название - long running application transaction. Самое лучшее решение - это оптимистическая блокировка с версионностью.
Т.е. во-первых оптимистическая блокировка - это когда данные в БД будут блокироваться только на период их непосредственной модификации.
Во-вторых версионность тем либо иным способом - проще всего с помощью timestamp колонки. Она нужна так как в отличие от пессимистической блокировки (ваш вариант №2) блокировка на прочитанные ресурсы в начале транзакции ставиться не будет и перед модификацией данных стоит сначала проверить не изменил ли их кто-нибудь до вас.

Если же это решение по тем или иным соображениям не подходит - то тогда вариант 2 - но только в крайнем случае.

а можно же сделать типа вот так:
допустим у меня редактируется в одной транзакции строка мастер и много строк детали:

1. нажимаю на insert/edit(в master форме) - запускаю транзакцию но неделаю никаких блокировок.
(Есть возможность редактировать 1 строку мастера, и много строк детали прикреплённых к этой строке мастера)
2. допустим нужно поменять или добавить какую то строку в деталь.
если нужно поменять(update), я перед этим просто select её for update... и дальше если ошибка что то говорю юзвергу, а если нет ошибки - сразу изменяю...
3. после изменений строки в детали если чё - rollback to savepoint...
4. после всех изменений делаю commit/rollback в мастер таблице.

????
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32828748
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
traktor123

а можно же сделать типа вот так:

вы описываете вариант пессимистической блокировки. Я правда не понял как это открывать транзакцию и ничего не блокировать? Ну и for update - это просто обязательно, если вы в транзакции читаете данные, которые впоследствии планируете модифицировать


Еще немного слов про оптимистическую блокировку. На данный момент большинство средств доступа к БД автоматически поддерживают timestamp для контроля версий и batch updates для пакетного обновления. Поэтому общий сценарий достаточно прост

Читаете данные (с помощью простых select'ов без for update)
Работаете с ними

Выполняете пакетное обновление в одной транзакции. При этом для каждого модифицируемого ресурса проверяете версии на клиенте и на сервера (обычно для этого ничего делать не надо так как большую часть работы на себя берет слой доступа к данным - будь то ADO или JDBC) Если все нормально - фиксируете транзакцию. Если же что-то уже было изменено - то, обычно, откатываете ее
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32828824
traktor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri traktor123

а можно же сделать типа вот так:

вы описываете вариант пессимистической блокировки. Я правда не понял как это открывать транзакцию и ничего не блокировать? Ну и for update - это просто обязательно, если вы в транзакции читаете данные, которые впоследствии планируете модифицировать


Еще немного слов про оптимистическую блокировку. На данный момент большинство средств доступа к БД автоматически поддерживают timestamp для контроля версий и batch updates для пакетного обновления. Поэтому общий сценарий достаточно прост

Читаете данные (с помощью простых select'ов без for update)
Работаете с ними

Выполняете пакетное обновление в одной транзакции. При этом для каждого модифицируемого ресурса проверяете версии на клиенте и на сервера (обычно для этого ничего делать не надо так как большую часть работы на себя берет слой доступа к данным - будь то ADO или JDBC) Если все нормально - фиксируете транзакцию. Если же что-то уже было изменено - то, обычно, откатываете ее

а что такое timestamp ???
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32828892
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timestamp - тип данных. Посмотрите документацию к вашей СУБД
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32829085
traktor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuritimestamp - тип данных. Посмотрите документацию к вашей СУБД

ага т.е. это самому нужно организовывать поле с времененм и проверять его ?
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32829264
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно достаточно организовать поле - все остально будет делать БД и интерфейс доступа

PS> пора бы раскрыть что за БД и на чем написан клиент :)
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32829483
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 АндрейЗорин.
Вот, посмотрите, какие замечательные "танцы с бубнами" на пустом месте.
А мы, как дети малые, используем DW по старинке.
...
Рейтинг: 0 / 0
Транзакции. Вопрос к людям с ОР
    #32830236
traktor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriобычно достаточно организовать поле - все остально будет делать БД и интерфейс доступа

PS> пора бы раскрыть что за БД и на чем написан клиент :)
oracle, delphi неподскажите примерчик ???
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Транзакции. Вопрос к людям с ОР
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]