|
Как (технически) работает метод "заблокировать" | ☑ | ||
---|---|---|---|---|
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) "Сервис блокировок" - они на одном узле кластера развернут или на нескольких?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |