Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
traktor123 Для подобных транзакций есть даже название - long running application transaction. Самое лучшее решение - это оптимистическая блокировка с версионностью. Т.е. во-первых оптимистическая блокировка - это когда данные в БД будут блокироваться только на период их непосредственной модификации. Во-вторых версионность тем либо иным способом - проще всего с помощью timestamp колонки. Она нужна так как в отличие от пессимистической блокировки (ваш вариант №2) блокировка на прочитанные ресурсы в начале транзакции ставиться не будет и перед модификацией данных стоит сначала проверить не изменил ли их кто-нибудь до вас. Если же это решение по тем или иным соображениям не подходит - то тогда вариант 2 - но только в крайнем случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 17:46 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
tru55 traktor123 2. insert, update, delete - блокируют для записи те строки, которые попадают в их условие отбора ??? 2. Да tru55, Вы имели в виду какую-то определённую СУБД? потому что в MS SQL 2k блокируется целая страница (несколько записей), а иногда и целая таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 18:52 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukov tru55, Вы имели в виду какую-то определённую СУБД? потому что в MS SQL 2k блокируется целая страница (несколько записей), а иногда и целая таблица. Перед первым моим ответом traktor123 упомянул Oracle, соответственно и ответы по нему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 18:57 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
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 в мастер таблице. ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 19:42 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
traktor123 а можно же сделать типа вот так: вы описываете вариант пессимистической блокировки. Я правда не понял как это открывать транзакцию и ничего не блокировать? Ну и for update - это просто обязательно, если вы в транзакции читаете данные, которые впоследствии планируете модифицировать Еще немного слов про оптимистическую блокировку. На данный момент большинство средств доступа к БД автоматически поддерживают timestamp для контроля версий и batch updates для пакетного обновления. Поэтому общий сценарий достаточно прост Читаете данные (с помощью простых select'ов без for update) Работаете с ними Выполняете пакетное обновление в одной транзакции. При этом для каждого модифицируемого ресурса проверяете версии на клиенте и на сервера (обычно для этого ничего делать не надо так как большую часть работы на себя берет слой доступа к данным - будь то ADO или JDBC) Если все нормально - фиксируете транзакцию. Если же что-то уже было изменено - то, обычно, откатываете ее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 15:29 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
funikovyuri traktor123 а можно же сделать типа вот так: вы описываете вариант пессимистической блокировки. Я правда не понял как это открывать транзакцию и ничего не блокировать? Ну и for update - это просто обязательно, если вы в транзакции читаете данные, которые впоследствии планируете модифицировать Еще немного слов про оптимистическую блокировку. На данный момент большинство средств доступа к БД автоматически поддерживают timestamp для контроля версий и batch updates для пакетного обновления. Поэтому общий сценарий достаточно прост Читаете данные (с помощью простых select'ов без for update) Работаете с ними Выполняете пакетное обновление в одной транзакции. При этом для каждого модифицируемого ресурса проверяете версии на клиенте и на сервера (обычно для этого ничего делать не надо так как большую часть работы на себя берет слой доступа к данным - будь то ADO или JDBC) Если все нормально - фиксируете транзакцию. Если же что-то уже было изменено - то, обычно, откатываете ее а что такое timestamp ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 16:01 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
timestamp - тип данных. Посмотрите документацию к вашей СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 16:25 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
funikovyuritimestamp - тип данных. Посмотрите документацию к вашей СУБД ага т.е. это самому нужно организовывать поле с времененм и проверять его ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 17:32 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
обычно достаточно организовать поле - все остально будет делать БД и интерфейс доступа PS> пора бы раскрыть что за БД и на чем написан клиент :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 18:55 |
|
||
|
Транзакции. Вопрос к людям с ОР
|
|||
|---|---|---|---|
|
#18+
2 АндрейЗорин. Вот, посмотрите, какие замечательные "танцы с бубнами" на пустом месте. А мы, как дети малые, используем DW по старинке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2004, 06:59 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32828748&tid=1546129]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 377ms |

| 0 / 0 |
