powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Конкурентый доступ в 3х звеневой архитектуре?
27 сообщений из 27, показаны все 2 страниц
Конкурентый доступ в 3х звеневой архитектуре?
    #37326838
karapetyan_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ уперся помогите.
Как правильнее организовать логику конкурентного доступа в корпоративном приложении.
Опишу ситуацию:
База: Оракл,
Клиенты: куча разных начиная от 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
Конкурентый доступ в 3х звеневой архитектуре?
    #37327229
karapetyan_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, вопрос все еще актуальный............ хееееееееелп.
...
Рейтинг: 0 / 0
Конкурентый доступ в 3х звеневой архитектуре?
    #37327331
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karapetyan_aВариант 3: не приходит в голову...........


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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

зато всегда достоверные остатки, и корректировки задним числом без проблем
...
Рейтинг: 0 / 0
Конкурентый доступ в 3х звеневой архитектуре?
    #37385016
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerесли в 2х звенке блокируем таблицу (нельзя будет никому менять остатки), то на 3х можно сделать блокировку на конкретный код товара и склад
А чё, в 2х звенке нельзя блокировать конкретный код товара и склад? :)
...
Рейтинг: 0 / 0
Конкурентый доступ в 3х звеневой архитектуре?
    #37385913
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛой,

не всегда
например в MySql MyISAM нет блокировок на уровне записи
...
Рейтинг: 0 / 0
Конкурентый доступ в 3х звеневой архитектуре?
    #37386030
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_agerАнатоЛой,

не всегда
например в MySql MyISAM нет блокировок на уровне записи
мы вроде о логической говорим. Это доп-поле с галкой.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Конкурентый доступ в 3х звеневой архитектуре?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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