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

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

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

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

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

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

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

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

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


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