Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Блокировка уровня задачи / 14 сообщений из 14, страница 1 из 1
03.10.2005, 12:53
    #33301132
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Господа, следующая ситуация:
есть следующая комбинация атрибутов:
сделка, объект сделки (что покупаем/продаем), папка сделки (место, где лежит конкретная сделка).
Над ними выполняется так называемая бизнес-операция (по сути - набор проводок).
Необходимо обеспечить, чтобы в один момент времени только один человек мог выполнить конкретную бизнес-операцию по набору вышеперечисленных параметров. Я решил сделать это с использованием пользовательских блокировок (в Oracle такая штука есть - делаешь блокировку с каким-нибудь номером и при попытке создать блокировку с таким-же номером получаешь отлуп). Соответственно нужно формировать этот номер. Я подумал, что можно получать его как сумму ID всех атрибутов (это на самом деле либо PK, либо FK), но он получается ну очень большим (так как бизнес-операции осуществляются по достаточно большому количеству сделок, папок), а код блокировки в Oracle - number. Следовательно размерности не хватает. Какие могут быть другие варианты формирования кода? Кто как решает аналогичные проблемы?
...
Рейтинг: 0 / 0
03.10.2005, 13:06
    #33301177
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Shtock пишет:

> папок), а код блокировки в Oracle - number. Следовательно размерности не
> хватает. Какие могут быть другие варианты формирования кода? Кто как
> решает аналогичные проблемы?

Использую собственный механизм блокировок с нужным набором параметров
любого типа. Реализуется достаточно просто - 1 таблица блокировок и 2
процедуры - попытка повесить блокировку и снятие блокировки.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.10.2005, 13:10
    #33301193
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Как-то фигачить свое неохота. Нужно отдельную табличку делать. Что-то в нее писать. А если сессии отвалятся... Нужен сборщик мусора.
Но все-таки было бы интересно узнать как Ваш механизм устроен.
...
Рейтинг: 0 / 0
03.10.2005, 15:35
    #33301597
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Так и устроено - в табличку пишется тип и код блокируемого обьекта, дата блокировки, код сессии и пользователь. Перед попыткой изменения записи вызывается ХП, которая ругается, если блокировка другой сессии есть и вешает свою, если блокироки еще нет. Для 100% гарантии вешается ее же вызов на триггера изменения и удаления, только с указанием флага, не проводить блокировку, а только проверить, не блокирована ли запись другой сессией. Так же, после успешного завершения сохранения, клиентской частью вызывается та же ХП, удаляющая блокировку (в идеале делает предок изменения записей, где вначале при открытии идет попытка блокировать обьект, а после удачного сохранения - снятие блокировки и потом все окна изменения наследуются от него). Так же в БД написанно событие EVENT ON DISCONNECT, которое автопилотом вызывается СУБД на отвалившуюся или отсоединившуюся сессию и код внутри нее чистит по коду сессии висящие блокировки из таблицы блокировок. Таким образом гарантируется отсутствие мусора в таблице блокировок и наличие механизма их снятия - администратору достаточно убить сессию, которая повесила на долгое время блокировку на изменение документа (хочу заметить именно документа, что может быть по понятиям гораздо обширнее, чем одна таблица и одна запись) или же если у сервера выставлен timeout idle, он сам убьет бездействующую сессию, таким образом инициализировав чистку блокировок по ней.

Думаю, в Оракле есть аналогичный механизм EVENT-ов (или еще чего, может просто по другому называется), который позволяет на различные события сервера вызывать свой код, в т.ч. и на CONNECT/DISCONNECT сессий. Пользоваться же блокировками сервера в своих личных корыстных целях думается не есть хорошо, ресурснозатратно и не известно к чему плохому может привести.
...
Рейтинг: 0 / 0
03.10.2005, 16:02
    #33301660
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Идея в принципе понятна, но так лениво писать...
...
Рейтинг: 0 / 0
03.10.2005, 17:28
    #33301965
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Shtock пишет:

> Идея в принципе понятна, но так лениво писать...

Так в чем проблема? Тут, я полагаю, найдется много людей, которые
напишут это за вас. Не безвозмездно, конечно же
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.10.2005, 17:41
    #33302005
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Позволю себе немного выпендриться, на моей работе и так напишут за меня. Мне главное написать как. Я, правда, если не поборю лень, уже придумал наинаглейшую фразу в ТЗ: "Разработка механизма блокировки по выбору отдела разработки" :)
...
Рейтинг: 0 / 0
03.10.2005, 19:00
    #33302272
!!!
!!!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
ShtockПозволю себе немного выпендриться, на моей работе и так напишут за меня. Мне главное написать как. Я, правда, если не поборю лень, уже придумал наинаглейшую фразу в ТЗ: "Разработка механизма блокировки по выбору отдела разработки" :)Интересно... Всегда считал, что выбор способа реализации - это прерогатива разработчика
...
Рейтинг: 0 / 0
04.10.2005, 01:07
    #33302551
Vadim_Maximov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
ShtockА чем select for update nowait не устраивает? Только нужно понять, куда его лучше прилепячить.
...
Рейтинг: 0 / 0
04.10.2005, 09:10
    #33302757
Calm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
авторВсегда считал, что выбор способа реализации - это прерогатива разработчика
Отнюдь.
При выборе способа реализации следует учитывать много факторов. Знание некоторых из них не является обязанностью отдельного разработчика и даже может быть вне его компетенции.
...
Рейтинг: 0 / 0
04.10.2005, 09:36
    #33302802
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
To Vadim_Maximov
Потому, что цель - позволить выполнить определенную бизнес-операцию по определенной комбинации параметров. Если же мы будем делать select for update - заблокируем монопольно выполнение ВСЕХ бизнес-операций по комбинации параметров.
...
Рейтинг: 0 / 0
04.10.2005, 09:45
    #33302826
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Попробую чуть более подробно объяснить. Может действительно select for update спасет, а я этого не вижу.

Есть таблица сделок. Сделки в отношении 1-1 входят в папки. Сделки заключаются с определенным объектом: тоже ссылка 1-1.

ПОльзователь выбирает объекты сделок, входящие в конкретные папки и сама система уже определяет сделки с этими объектами.

Если мы заблокируем таблицу сделок, потом объектов сделок, папок и бизнес-операций
1. Если другой пользователь захочет выполнить другую бизнес-операцию по такому же набору сделок, объектов сделок и папок - то произойдет отлуп - заблокированы таблицы набора.
2. Если же другой пользователь захочет выполнить такую же бизнес-операцию, но по другому набору - тоже отлуп - ведь и таблица бизнес-операций заблокирована.
...
Рейтинг: 0 / 0
04.10.2005, 15:05
    #33303974
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Зачем блокировать полностью таблицу? Только нужные записи. Но тогда проблема в другом: select for update объекта и его детальных записей не спасает от добавления записей в детальные таблицы для объекта, что в прикладном смысле также является изменением объекта.
Это нужно ловить уже своими триггерами.
...
Рейтинг: 0 / 0
04.10.2005, 15:53
    #33304132
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка уровня задачи
Я говорю обобщенно. SELECT FOR UPDATE как раз и блокирует записи. При выполнении бизнес-операции изменения параметров сделки уже не может быть (у нее установлен соответствующий статус - типа готова для проводок). Это не проблема. Проблема четко обозначена в предыдущем посте.
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Блокировка уровня задачи / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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