Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Конкурентый доступ в 3х звеневой архитектуре? / 25 сообщений из 27, страница 1 из 2
28.06.2011, 10:14
    #37326838
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
Народ уперся помогите.
Как правильнее организовать логику конкурентного доступа в корпоративном приложении.
Опишу ситуацию:
База: Оракл,
Клиенты: куча разных начиная от 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: не приходит в голову...........

С уважением. Ашот.
...
Рейтинг: 0 / 0
28.06.2011, 13:49
    #37327229
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
Люди, вопрос все еще актуальный............ хееееееееелп.
...
Рейтинг: 0 / 0
28.06.2011, 14:49
    #37327331
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_aВариант 3: не приходит в голову...........


Вариант 3:
- отказаться от пересчета ВСЕЙ таблицы остатков
...
Рейтинг: 0 / 0
28.06.2011, 14:51
    #37327336
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
Вариант 4
- все изменения задним числом проводить только через корректирующие документы
...
Рейтинг: 0 / 0
28.06.2011, 15:06
    #37327367
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
SeVakarapetyan_aВариант 3: не приходит в голову...........


Вариант 3:
- отказаться от пересчета ВСЕЙ таблицы остатков

:) отказатся не могу, да и не в этом вопрос.
Вопрос в подходе, как организуют конкурентый доступ к данным в многопользовательской среде.
Ведь если я юзаю какой либо сервис гугла, то врядли я у них в базе чет-там блокирую.
...
Рейтинг: 0 / 0
28.06.2011, 15:19
    #37327405
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
SeVaВариант 4
- все изменения задним числом проводить только через корректирующие документы
Опять таки, вопрос не складской, наши бухгалтера знают, понимают, и сами того хотят, чтоб имели возможность задним числом вводить данные, и именно с пересчетом всех последующих выходов (кол-ва и цен) задача стоит именно так.
Но, не хочу обсуждать склад!!!

Вопрос: Конкурентный доступ!

Вот к примеру, юзер А и юзер Б, считали на клиента документ номер 1. оба отредактировали и оба одновременно (+-0.001с)нажали сохранить. на сервер приложений в разделяемых сессиях заработал сервис DocService.SaveDoc();
Который (после проверки прав доступа) делегировал сию задачу к модулю бизнес логики BL.
тот в свою очередь должен, что-то считать с базы, что-то посчитать, перепроверить, валидация, то-се, вобщем прошло 3 сек. :), так как сервер приложений сессионный то 2 процесса идут одновременно. в итоге кто-то сохранится первым, а второе сохранение уже не валидно, потому как ситуация на сервере поменалась...
...
Рейтинг: 0 / 0
28.06.2011, 15:39
    #37327445
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_a,
логическая блокировка
...
Рейтинг: 0 / 0
28.06.2011, 16:07
    #37327489
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
Petro123karapetyan_a,
логическая блокировка
Можно на пальцах/яблоках?
...
Рейтинг: 0 / 0
28.06.2011, 17:42
    #37327697
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_a,
- сервер ничего о ней не знает, всё в коде
- добавить флаг - "занято" и пункт меню - занЯть \ выгрузить для редактирования
- после окончания транзакции - снять флаг
...
Рейтинг: 0 / 0
28.06.2011, 17:52
    #37327716
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
Petro123karapetyan_a,
- сервер ничего о ней не знает, всё в коде
- добавить флаг - "занято" и пункт меню - занЯть \ выгрузить для редактирования
- после окончания транзакции - снять флаг
По сути, обеспечить блокировку на уровне ApplicationServer? думал о таком подходе, но опять таки масштабируемость...
Ведь крупные системы (амазон, гугл) как-то решают данные проблемы? вот интересно как...
Может в очередь ставить?
...
Рейтинг: 0 / 0
28.06.2011, 18:08
    #37327739
pilot911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_aPetro123karapetyan_a,
- сервер ничего о ней не знает, всё в коде
- добавить флаг - "занято" и пункт меню - занЯть \ выгрузить для редактирования
- после окончания транзакции - снять флаг
По сути, обеспечить блокировку на уровне ApplicationServer? думал о таком подходе, но опять таки масштабируемость...
Ведь крупные системы (амазон, гугл) как-то решают данные проблемы? вот интересно как...
Может в очередь ставить?

а какие проблемы они решают, хотя бы один пример
...
Рейтинг: 0 / 0
28.06.2011, 18:11
    #37327741
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_a,
ты сильно много не масштабируй :)
Всё одно - переписывать :))

Это как при выборе невесты

1) Жениться или нет?
2) Если жениться, то на ком?
3) Если найду на ком, то куда девать нынешнюю жену?
...
Рейтинг: 0 / 0
19.07.2011, 14:01
    #37357736
leader
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_aPetro123karapetyan_a,
логическая блокировка
Можно на пальцах/яблоках?

на пальцах.
остатки не возникают у тебя из ниоткуда. они меняются при изменении/переделке какого-либо первичного документа.
2 пользователя открыли документы - отлично.
они могут на них посмотреть. чтобы изменить их, нужно надавить кнопку "Редактировать", которая ставит логическую эксклюзивную блокировку на данный документ. кто первый ее надавил - того и тапки. второму надавившему ее выдается сообщение вида "документ заблокирован пользователем таким-то для редактирования". и блокировка висит до тех пор, пока не будет нажато ОК/Cancel.
...
Рейтинг: 0 / 0
04.08.2011, 17:29
    #37381081
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
leaderkarapetyan_aпропущено...

Можно на пальцах/яблоках?

на пальцах.
остатки не возникают у тебя из ниоткуда. они меняются при изменении/переделке какого-либо первичного документа.
2 пользователя открыли документы - отлично.
они могут на них посмотреть. чтобы изменить их, нужно надавить кнопку "Редактировать", которая ставит логическую эксклюзивную блокировку на данный документ. кто первый ее надавил - того и тапки. второму надавившему ее выдается сообщение вида "документ заблокирован пользователем таким-то для редактирования". и блокировка висит до тех пор, пока не будет нажато ОК/Cancel.

Это в случае редактирования существующего, ну предположим: я конкретно редактируемый документ заблокировал, но ведь в это же самое время, кто-то другой, может запросто создать новый документ, за более ранней датой!!! и вставить его, с изменением ВСЕХ ПОСЛЕДУЮЩИХ остатков, так что сколько хошь блокируй РЕДАКТИРУЕМЫЙ документ, без разницы.
...
Рейтинг: 0 / 0
05.08.2011, 15:40
    #37382661
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_aЭто в случае редактирования существующего, ну предположим: я конкретно редактируемый документ заблокировал, но ведь в это же самое время, кто-то другой, может запросто создать новый документ, за более ранней датой!!! и вставить его, с изменением ВСЕХ ПОСЛЕДУЮЩИХ остатков, так что сколько хошь блокируй РЕДАКТИРУЕМЫЙ документ, без разницы.А что, остатки - это не документ, их при редактировании блокировать не надо?

Принцип простой - всё, что редактируется, блокируется до конца редактирования.
Разумеется, всё, что читается, должно так же на время чтения блокироваться от изменений.

Принципы работы с данными давно придуманы, ничего с тех пор не поменялось. Если эти данные рулятся не СУБД, а сервером приложений - ничего от этого в теории не меняется.
...
Рейтинг: 0 / 0
05.08.2011, 16:09
    #37382723
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_a,
приведи определение бизнес-сущности "Документ" и "Остатки".
Тогда будет видно что блокировать, а что накапливать.
...
Рейтинг: 0 / 0
06.08.2011, 01:44
    #37383222
monsenior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
karapetyan_aleaderпропущено...


на пальцах.
остатки не возникают у тебя из ниоткуда. они меняются при изменении/переделке какого-либо первичного документа.
2 пользователя открыли документы - отлично.
они могут на них посмотреть. чтобы изменить их, нужно надавить кнопку "Редактировать", которая ставит логическую эксклюзивную блокировку на данный документ. кто первый ее надавил - того и тапки. второму надавившему ее выдается сообщение вида "документ заблокирован пользователем таким-то для редактирования". и блокировка висит до тех пор, пока не будет нажато ОК/Cancel.

Это в случае редактирования существующего, ну предположим: я конкретно редактируемый документ заблокировал, но ведь в это же самое время, кто-то другой, может запросто создать новый документ, за более ранней датой!!! и вставить его, с изменением ВСЕХ ПОСЛЕДУЮЩИХ остатков, так что сколько хошь блокируй РЕДАКТИРУЕМЫЙ документ, без разницы.
И в чем тут проблема, пусть вставляет тебе то что?
Ты либо можешь разрешить делать документы задним числом либо нет, конечно насчет пересчета остатков ты загнул, т.к.
корректировки задним числом не носят массовый харрактер, вполне можно вставить в таблицу новые записи и на выходе
давать данные через sum, а потом(в не рабочее время, по расписанию) сделать пересчет.
...
Рейтинг: 0 / 0
06.08.2011, 12:26
    #37383405
vill_ager
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
блокировать документ смысла нет
блокируем таблицу остатков, и не на время редактирования, а только в момент корректировки
так:
блокируем
проверяем остаток (например - не может быть меньше 0)
если можно: пишем
отпускаем блокировку

и конкурент только после этого начинает тот же процесс, если не хватило - пролетает

если в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад
...
Рейтинг: 0 / 0
06.08.2011, 13:53
    #37383461
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
vill_agerблокировать документ смысла нет
блокируем таблицу остатков, и не на время редактирования, а только в момент корректировки
так:
блокируем
проверяем остаток (например - не может быть меньше 0)
если можно: пишем
отпускаем блокировку

и конкурент только после этого начинает тот же процесс, если не хватило - пролетает

если в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад

Видимо да, блокировать не сам документ а таблицу остатков...
...
Рейтинг: 0 / 0
06.08.2011, 20:53
    #37383663
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
vill_agerесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и складВ двухзвенке всё абсолютно так же, блокировать таблицу не надо.

С точки зрения теории работа с даннными идентична.

Реализация, понятно, может быть разная, но сейчас это везде поддерживается.
vill_agerблокировать документ смысла нетЕсли в системе есть понятие "изменение документа", то конечно документ тоже нужно блокировать.
...
Рейтинг: 0 / 0
06.08.2011, 21:03
    #37383670
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
alexeyvgРеализация, понятно, может быть разная, но сейчас это везде поддерживается.
vill_agerблокировать документ смысла нетЕсли в системе есть понятие "изменение документа", то конечно документ тоже нужно блокировать.
только если в системе, при наличии такого понятия, отсутствует логика, т.е. просто образно "файлопомойка". В системе с логикой таких вопросов просто не возникает.
...
Рейтинг: 0 / 0
06.08.2011, 23:11
    #37383737
vill_ager
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
alexeyvgВ двухзвенке всё абсолютно так же, блокировать таблицу не надо.

и как можно без блокировки списать товар со склада (не уйдя в минус) с двух (трех, четырех) компов?
...
Рейтинг: 0 / 0
07.08.2011, 09:33
    #37383874
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
vill_ageralexeyvgВ двухзвенке всё абсолютно так же, блокировать таблицу не надо.

и как можно без блокировки списать товар со склада (не уйдя в минус) с двух (трех, четырех) компов? Я же написал, что нужно блокировать:alexeyvgесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и складВ двухзвенке всё абсолютно так же, блокировать таблицу не надо.Точно так же, как в 3-х звенке, нужно заблокировать конкретный код товара и склад.

Всю таблицу или всю базу блокировать необязательно.

Я к тому, что принципы правильной работы с данными не зависят от количества уровней (1, 2, 3, ... n).

Всё это, по моему, было давно исследовано до появления СУБД или существующих 3-х звенных архитектур.
...
Рейтинг: 0 / 0
07.08.2011, 13:59
    #37384032
vill_ager
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
alexeyvg,
ок, теперь все понятно

я как-то вообще не любитель с остатками возиться, в основном использую просто таблицу прихода-расхода,
так ее приходится блокировать всю целиком на время контроля остатка и записи

зато всегда достоверные остатки, и корректировки задним числом без проблем
...
Рейтинг: 0 / 0
08.08.2011, 12:27
    #37385016
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкурентый доступ в 3х звеневой архитектуре?
vill_agerесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад
А чё, в 2х звенке нельзя блокировать конкретный код товара и склад? :)
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Конкурентый доступ в 3х звеневой архитектуре? / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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