|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
Народ уперся помогите. Как правильнее организовать логику конкурентного доступа в корпоративном приложении. Опишу ситуацию: База: Оракл, Клиенты: куча разных начиная от OracleForms, FoxPro, .NET WinForms, ASP.NET вобщем каша. Сейчас пишу 3х звенку бд-апп сервер-клиенты (Oracle -> DAL-AppLogic-Services->Any clients) в старых программах любое редактирование предварялось блокировкой: select my_table for update. В новый модулях я отказался от блокировки, в пользю modified (update my_table ... where id = :pId and modified = :pModified) Такой подход работает для одной записи(сущности)... Но вот написал складскую программу, и тут проблема такая, ввод задним числом любого документа приводит к пересчету ВСЕЙ таблицы остатков. Как решать проблемы конкурентного доступа если изменения любой строки сущности, приводит к пересчету всех последующих ( по дате ) строк? Вариант 1: Блокировать в базе данных всю таблицу - мне не нравится Вариант 2: Организовать Singletone (кажись так пишется) вобщем на серверере приложений организовать одновременное обновление данной таблицы только с одного потока? - тоже не нравится, потому как сие удар по масштабируемости... Вариант 3: не приходит в голову........... С уважением. Ашот. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 10:14 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
Люди, вопрос все еще актуальный............ хееееееееелп. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 13:49 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_aВариант 3: не приходит в голову........... Вариант 3: - отказаться от пересчета ВСЕЙ таблицы остатков ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 14:49 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
Вариант 4 - все изменения задним числом проводить только через корректирующие документы ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 14:51 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
SeVakarapetyan_aВариант 3: не приходит в голову........... Вариант 3: - отказаться от пересчета ВСЕЙ таблицы остатков :) отказатся не могу, да и не в этом вопрос. Вопрос в подходе, как организуют конкурентый доступ к данным в многопользовательской среде. Ведь если я юзаю какой либо сервис гугла, то врядли я у них в базе чет-там блокирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 15:06 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
SeVaВариант 4 - все изменения задним числом проводить только через корректирующие документы Опять таки, вопрос не складской, наши бухгалтера знают, понимают, и сами того хотят, чтоб имели возможность задним числом вводить данные, и именно с пересчетом всех последующих выходов (кол-ва и цен) задача стоит именно так. Но, не хочу обсуждать склад!!! Вопрос: Конкурентный доступ! Вот к примеру, юзер А и юзер Б, считали на клиента документ номер 1. оба отредактировали и оба одновременно (+-0.001с)нажали сохранить. на сервер приложений в разделяемых сессиях заработал сервис DocService.SaveDoc(); Который (после проверки прав доступа) делегировал сию задачу к модулю бизнес логики BL. тот в свою очередь должен, что-то считать с базы, что-то посчитать, перепроверить, валидация, то-се, вобщем прошло 3 сек. :), так как сервер приложений сессионный то 2 процесса идут одновременно. в итоге кто-то сохранится первым, а второе сохранение уже не валидно, потому как ситуация на сервере поменалась... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 15:19 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_a, логическая блокировка ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 15:39 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
Petro123karapetyan_a, логическая блокировка Можно на пальцах/яблоках? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 16:07 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_a, - сервер ничего о ней не знает, всё в коде - добавить флаг - "занято" и пункт меню - занЯть \ выгрузить для редактирования - после окончания транзакции - снять флаг ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 17:42 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
Petro123karapetyan_a, - сервер ничего о ней не знает, всё в коде - добавить флаг - "занято" и пункт меню - занЯть \ выгрузить для редактирования - после окончания транзакции - снять флаг По сути, обеспечить блокировку на уровне ApplicationServer? думал о таком подходе, но опять таки масштабируемость... Ведь крупные системы (амазон, гугл) как-то решают данные проблемы? вот интересно как... Может в очередь ставить? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 17:52 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_aPetro123karapetyan_a, - сервер ничего о ней не знает, всё в коде - добавить флаг - "занято" и пункт меню - занЯть \ выгрузить для редактирования - после окончания транзакции - снять флаг По сути, обеспечить блокировку на уровне ApplicationServer? думал о таком подходе, но опять таки масштабируемость... Ведь крупные системы (амазон, гугл) как-то решают данные проблемы? вот интересно как... Может в очередь ставить? а какие проблемы они решают, хотя бы один пример ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 18:08 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_a, ты сильно много не масштабируй :) Всё одно - переписывать :)) Это как при выборе невесты 1) Жениться или нет? 2) Если жениться, то на ком? 3) Если найду на ком, то куда девать нынешнюю жену? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2011, 18:11 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_aPetro123karapetyan_a, логическая блокировка Можно на пальцах/яблоках? на пальцах. остатки не возникают у тебя из ниоткуда. они меняются при изменении/переделке какого-либо первичного документа. 2 пользователя открыли документы - отлично. они могут на них посмотреть. чтобы изменить их, нужно надавить кнопку "Редактировать", которая ставит логическую эксклюзивную блокировку на данный документ. кто первый ее надавил - того и тапки. второму надавившему ее выдается сообщение вида "документ заблокирован пользователем таким-то для редактирования". и блокировка висит до тех пор, пока не будет нажато ОК/Cancel. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 14:01 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
leaderkarapetyan_aпропущено... Можно на пальцах/яблоках? на пальцах. остатки не возникают у тебя из ниоткуда. они меняются при изменении/переделке какого-либо первичного документа. 2 пользователя открыли документы - отлично. они могут на них посмотреть. чтобы изменить их, нужно надавить кнопку "Редактировать", которая ставит логическую эксклюзивную блокировку на данный документ. кто первый ее надавил - того и тапки. второму надавившему ее выдается сообщение вида "документ заблокирован пользователем таким-то для редактирования". и блокировка висит до тех пор, пока не будет нажато ОК/Cancel. Это в случае редактирования существующего, ну предположим: я конкретно редактируемый документ заблокировал, но ведь в это же самое время, кто-то другой, может запросто создать новый документ, за более ранней датой!!! и вставить его, с изменением ВСЕХ ПОСЛЕДУЮЩИХ остатков, так что сколько хошь блокируй РЕДАКТИРУЕМЫЙ документ, без разницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2011, 17:29 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_aЭто в случае редактирования существующего, ну предположим: я конкретно редактируемый документ заблокировал, но ведь в это же самое время, кто-то другой, может запросто создать новый документ, за более ранней датой!!! и вставить его, с изменением ВСЕХ ПОСЛЕДУЮЩИХ остатков, так что сколько хошь блокируй РЕДАКТИРУЕМЫЙ документ, без разницы.А что, остатки - это не документ, их при редактировании блокировать не надо? Принцип простой - всё, что редактируется, блокируется до конца редактирования. Разумеется, всё, что читается, должно так же на время чтения блокироваться от изменений. Принципы работы с данными давно придуманы, ничего с тех пор не поменялось. Если эти данные рулятся не СУБД, а сервером приложений - ничего от этого в теории не меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2011, 15:40 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_a, приведи определение бизнес-сущности "Документ" и "Остатки". Тогда будет видно что блокировать, а что накапливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2011, 16:09 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
karapetyan_aleaderпропущено... на пальцах. остатки не возникают у тебя из ниоткуда. они меняются при изменении/переделке какого-либо первичного документа. 2 пользователя открыли документы - отлично. они могут на них посмотреть. чтобы изменить их, нужно надавить кнопку "Редактировать", которая ставит логическую эксклюзивную блокировку на данный документ. кто первый ее надавил - того и тапки. второму надавившему ее выдается сообщение вида "документ заблокирован пользователем таким-то для редактирования". и блокировка висит до тех пор, пока не будет нажато ОК/Cancel. Это в случае редактирования существующего, ну предположим: я конкретно редактируемый документ заблокировал, но ведь в это же самое время, кто-то другой, может запросто создать новый документ, за более ранней датой!!! и вставить его, с изменением ВСЕХ ПОСЛЕДУЮЩИХ остатков, так что сколько хошь блокируй РЕДАКТИРУЕМЫЙ документ, без разницы. И в чем тут проблема, пусть вставляет тебе то что? Ты либо можешь разрешить делать документы задним числом либо нет, конечно насчет пересчета остатков ты загнул, т.к. корректировки задним числом не носят массовый харрактер, вполне можно вставить в таблицу новые записи и на выходе давать данные через sum, а потом(в не рабочее время, по расписанию) сделать пересчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 01:44 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
блокировать документ смысла нет блокируем таблицу остатков, и не на время редактирования, а только в момент корректировки так: блокируем проверяем остаток (например - не может быть меньше 0) если можно: пишем отпускаем блокировку и конкурент только после этого начинает тот же процесс, если не хватило - пролетает если в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 12:26 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
vill_agerблокировать документ смысла нет блокируем таблицу остатков, и не на время редактирования, а только в момент корректировки так: блокируем проверяем остаток (например - не может быть меньше 0) если можно: пишем отпускаем блокировку и конкурент только после этого начинает тот же процесс, если не хватило - пролетает если в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад Видимо да, блокировать не сам документ а таблицу остатков... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 13:53 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
vill_agerесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и складВ двухзвенке всё абсолютно так же, блокировать таблицу не надо. С точки зрения теории работа с даннными идентична. Реализация, понятно, может быть разная, но сейчас это везде поддерживается. vill_agerблокировать документ смысла нетЕсли в системе есть понятие "изменение документа", то конечно документ тоже нужно блокировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 20:53 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
alexeyvgРеализация, понятно, может быть разная, но сейчас это везде поддерживается. vill_agerблокировать документ смысла нетЕсли в системе есть понятие "изменение документа", то конечно документ тоже нужно блокировать. только если в системе, при наличии такого понятия, отсутствует логика, т.е. просто образно "файлопомойка". В системе с логикой таких вопросов просто не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 21:03 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
alexeyvgВ двухзвенке всё абсолютно так же, блокировать таблицу не надо. и как можно без блокировки списать товар со склада (не уйдя в минус) с двух (трех, четырех) компов? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 23:11 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
vill_ageralexeyvgВ двухзвенке всё абсолютно так же, блокировать таблицу не надо. и как можно без блокировки списать товар со склада (не уйдя в минус) с двух (трех, четырех) компов? Я же написал, что нужно блокировать:alexeyvgесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и складВ двухзвенке всё абсолютно так же, блокировать таблицу не надо.Точно так же, как в 3-х звенке, нужно заблокировать конкретный код товара и склад. Всю таблицу или всю базу блокировать необязательно. Я к тому, что принципы правильной работы с данными не зависят от количества уровней (1, 2, 3, ... n). Всё это, по моему, было давно исследовано до появления СУБД или существующих 3-х звенных архитектур. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2011, 09:33 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
alexeyvg, ок, теперь все понятно я как-то вообще не любитель с остатками возиться, в основном использую просто таблицу прихода-расхода, так ее приходится блокировать всю целиком на время контроля остатка и записи зато всегда достоверные остатки, и корректировки задним числом без проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2011, 13:59 |
|
Конкурентый доступ в 3х звеневой архитектуре?
|
|||
---|---|---|---|
#18+
vill_agerесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад А чё, в 2х звенке нельзя блокировать конкретный код товара и склад? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2011, 12:27 |
|
|
start [/forum/topic.php?fid=33&fpage=25&tid=1548000]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 405ms |
0 / 0 |