Информация об изменениях

Сообщение Re: Блокировки в бизнес-слое от 28.09.2017 13:34

Изменено 28.09.2017 13:36 wildwind

Re: Блокировки в бизнес-слое
Здравствуйте, Poul_Ko, Вы писали:

P_K>Какие другие решения можете посоветовать?

P_K>Писать свой менеджер блокировок? Есть примеры?

Да, если это действительно оправдано. Примеры есть. Платформа 1С — там свой менеджер блокировок, в дополнение к блокировкам СУБД.

P_K>Технологии и архитектура: .NET, трёхзвенка Desktop Client — WCF services on IIS, EF — MS Sql Server, нет горизонтального масштабирования. Он позволяет заблокировать прикладной объект и обойтись одной блокировкой вместо множества строк в нескольких таблицах. Таким образом уменьшается количество блокировок в базе. Кроме того, возможны такие полезные вещи, как блокировка множества строк по условию. Например (если взять один из твоих примеров), у нас в таблице хранятся статусы заказов. И мы можем одной блокировкой заблокировать все неподтвержденные заказы одного клиента. Или даже группы клиентов. Если все это блокировать в базе, это будет медленно и тяжело для базы.


Но за это приходится платить дорогую цену. Все изменения бизнес объектов должны идти через этот менеждер блокировок. Например, мы не можем выполнить сложный многострочный UPDATE или DELETE, так как наш менеджер блокировок не может проверить, не относятся ли затронутые им строки к заблокированным объектам. Из-за этого сильно страдает производительность на запись.

Ну и правильно реализовать такой менеджер непросто. Например, классическая проблема: когда отпускать блокировки зависшего/отвалившегося клиента?
Re: Блокировки в бизнес-слое
Здравствуйте, Poul_Ko, Вы писали:

P_K>Какие другие решения можете посоветовать?

P_K>Писать свой менеджер блокировок? Есть примеры?

Да, если это действительно оправдано. Примеры есть. Платформа 1С — там свой менеджер блокировок, в дополнение к блокировкам СУБД. Он позволяет заблокировать прикладной объект и обойтись одной блокировкой вместо множества строк в нескольких таблицах. Таким образом уменьшается количество блокировок в базе. Кроме того, возможны такие полезные вещи, как блокировка множества строк по условию. Например (если взять один из твоих примеров), у нас в таблице хранятся статусы заказов. И мы можем одной блокировкой заблокировать все неподтвержденные заказы одного клиента. Или даже группы клиентов. Если все это блокировать в базе, это будет медленно и тяжело для базы.

Но за это приходится платить дорогую цену. Все изменения бизнес объектов должны идти через этот менеждер блокировок. Например, мы не можем выполнить сложный многострочный UPDATE или DELETE, так как наш менеджер блокировок не может проверить, не относятся ли затронутые им строки к заблокированным объектам. Из-за этого сильно страдает производительность на запись.

Ну и правильно реализовать такой менеджер непросто. Например, классическая проблема: когда отпускать блокировки зависшего/отвалившегося клиента?