Имя: Пароль:
1C
1С v8
Как (технически) работает метод "заблокировать"
0 vasbur
 
14.02.14
13:06
У объектов типа СправочникОбъект, ДокуменОбъект есть метод "Заблокировать"

Как он технически реализован? Где 1С хранит информацию о блокировках? Создает ли использование этого метода транзакционную нагрузку на СУБД?
1 Господин ПЖ
 
14.02.14
13:08
>Где 1С хранит информацию о блокировках?

если вкл. упр. блокировки - на сервере приложений
2 vasbur
 
14.02.14
13:09
(1) А если там кластер?
3 Господин ПЖ
 
14.02.14
13:09
>Создает ли использование этого метода транзакционную нагрузку на СУБД?

в зависимости от пользуемого режима блокировок в конфе/объекте
4 Господин ПЖ
 
14.02.14
13:10
(2) насколько помню там роли выделяют кто за что отвечает
5 vasbur
 
14.02.14
13:13
(1) помоему, метод "заблокировать" у документа не имеет отношения к упр блокировкам.
6 Reaper_1c
 
14.02.14
13:14
Объектные блокировки всегда живут на сервере приложений
7 vasbur
 
14.02.14
13:15
(6) А что происходит, когда серверов придожений несколько?
8 Господин ПЖ
 
14.02.14
13:16
>А что происходит, когда серверов придожений несколько?

кластер из нескольких серверов? один из них становится менеджером блокировок
9 vasbur
 
14.02.14
13:20
(8) Прикольное понимание кластера
10 vasbur
 
14.02.14
13:21
(9) В смысле - у 1С прикольное понимание, что такое кластер
11 Jaap Vduul
 
14.02.14
13:24
Как правильно заметили в (5) с управляемыми блокировками этот метод никак не связан.
В базе данных его вызов также никаких изменений не производит.
Данные о блокировке хранятся либо на сервере приложений , либо в файле *.1cl (для файловых баз 1цэ)
12 Господин ПЖ
 
14.02.14
13:37
во что нашел из старой ветки

Смысл метода Заблокировать() в следующем.
1.У каждого объекта в базе есть поле Версия (просто число).
2.При каждой записи объекта это число увеличивается в транзакции записи.
3.При чтении объекта из базы его версия тоже читается.
4.А при записи объекта, в транзакции записи всегда проверяется  соответствует ли версия в базе, версии объекта в памяти (ранее прочитанного). Если не соответствует, то происходит исключение. Т.о. платформа проверяет не записал ли какой нить другой пользователь объект в период времени между того момента когда его читали (ПолучитьОбъект) и сейчас, когда его записывают. Если объект уже успел кто-то записать, то вероятно он мог изменить какие-то его реквизиты, и т.о. в памяти сейчас лежит неактуальная его версия, и писать эту версию в базу нельзя.
5.Метод Заблокировать() просто увеличивает версию на 1, и записывает это значение в базу (и память своего объекта конечно). Конечно же проверяя перед этим не изменился ли объект в базе уже сейчас, в момент выполнения Заблокировать()

в (1) и (3) наврал
13 TormozIT
 
гуру
14.02.14
13:50
Метод Заблокировать устанавливает пессимистичную объектную блокировку, хранимую в менеджере кластера либо файле объектных блокировок файловой базы. Он не связан с реквизитом ВерсияДанных. Реквизит ВерсияДанных используется при оптимистичной объектной блокировке.
14 Господин ПЖ
 
14.02.14
14:20
значит ДимаО тоже наврал...
15 Reaper_1c
 
14.02.14
19:35
(7) В рамках кластера есть сервисы. Блокировки хранят узлы кластера с развернутым сервисом блокировок объектов. Репликацией данных об объектных блокировках сервер занимается самостоятельно.
16 vasbur
 
17.02.14
07:24
(15) "Сервис блокировок" - они на одном узле кластера развернут или на нескольких?