Имя: Пароль:
1C
 
Поговорим о БлокировкаДанных
0 Eugeneer
 
20.09.22
17:30
Есть там такое чудо. как БлокировкаДанных

Какой реальный толк дает? Есть смысл использовать для ускорения записи регистра сведений? или пофигу.
1 bolobol
 
20.09.22
17:35
Блокировка не для ускорения, а избегать падения
2 bolobol
 
20.09.22
17:36
Блокируется возможность параллельной записи конкурентом
3 rphosts
 
20.09.22
17:39
(0) начни с поиска ну пусть по фразам "фантомные записи", ""грязное" чтение".
4 mikecool
 
20.09.22
17:44
говорить не о чем...
5 rsv
 
20.09.22
17:52
(0) обеспечение изоляции транзакций  и как следствие согласованность данных.Либо блокировками либо версиями.
Прикладное трактование 1с ( галочка управляемый режим вкл) - блокировка данных.
Не быстро и не медленно , но правильно.
6 timurhv
 
20.09.22
19:04
(0) Загружает кто-то по веб-сервису данные. Если не ставить блокировку, допустим по артикулу номенклатуры, то могут 2 раза в 1 момент прислать пакеты с 1 артикулом и будут дубли справочника.
Ставишь свойство "Поля блокировки данных" у справочника по артикулу и 2-ой поток не сможет создать справочник с этим же артикулом наложив блокировку, пока 1-ый поток не снимет блокировку.

Или отправляете данные по документу в стороннюю программу, после отправки нужно изменить у него реквизит. Без блокировки может случиться ситуация, что пользователь открыл документ на редактирование, вы отправили пакет, но не смогли записать объект с измененным реквизитом.
7 Конструктор1С
 
20.09.22
19:34
(0) спи спокойно. Для ларьков с файловыми базами на полтора пользователя БлокировкаДанных не нужна
8 ДедМорроз
 
20.09.22
23:33
На самом деле,блокировка двнных - это отдельный механизм,не имеющий отношения ни к данным ни к блокировке.
Суть механизма в том,что у объектов определены поля блокировки,то есть координаты в многомерном пространстве,а объект блокировки позволяет сообщить о том,что мы собираемся изменять объект,который в этом пространстве нахрдится,причем,при пропуске координат сразу блокируется вся ось.
Соответственно,мы запрашиваем блокировку по данному пространству,и если она возможна,то нам возвращают управление,если нет,то выполняется ожидание и возвращается исключение.
Ну и,конечно,механизм работает в транзакции - при фиксации или отмене транзакции все блокировки снимаются.
В клиент-серверном варианте за блокировки отвечает сервер 1с и их даже в консоли кластера можно увидеть.
В файловом режиме они переводятся в блокировки таблиц,так как файловпя база блокировки на уровне записей не умеет.
9 Сергиус
 
20.09.22
23:56
(0)[Есть смысл использовать для ускорения записи регистра сведений]
Для ускорения записи, есть смысл разбивать на транзакции, а не пробовать пихать всё в одной туда.
10 H A D G E H O G s
 
21.09.22
00:16
(8) Для набора записей Регистра сведений при замещающей записи
Набор.Записать(ИСТИНА)
тоже блокируется вся ось, даже если ты четко отборы укажешь. Иначе от фантомов не избавиться.
11 Garykom
 
гуру
21.09.22
00:31
Что лучше блокировки или двойная проверка на дубли до и после записи?
Грязное чтение фигня решаемая транзакциями
12 rphosts
 
21.09.22
04:01
(8) "смешались в кучу кони-люди"... есть блокировки базовода(ака СУБД) а есть блокировки сервера 1С, у вас какое-то микс-описание
13 OldCondom
 
21.09.22
06:45
(9) многопоточность что ли?
14 rphosts
 
21.09.22
06:48
(13) большой набор данных сам по себе может попасть на ожидание на блокировках (в смысле чем больше данных тем линейно выше растёт вероятность, если в целом код ИБ не косячный)
15 OldCondom
 
21.09.22
06:54
(14) так да, мои потуги в многопоточность в это и упирались, толку было чуть менее, чем 0%. То есть еще и по блокировкам раскидывать?
16 rphosts
 
21.09.22
07:04
(15) если у тебя блоки транзакций не пересекаются и у серверов процессоры работают в полсилы - распараллелить очевидный способ ускорить
17 MyNick
 
21.09.22
07:52
(0) экспертная постановка вопроса
18 Eugeneer
 
21.09.22
09:44
Ну давайте пример приведем. Допустим есть некий регистр сведений.

В нем сотни тысяч записей. Все их нужно уничтожить - по одному измерению. Допустим это Склад.


НаборЗаписей = РегистрыСведений.РаспределениеЗапасов.СоздатьНаборЗаписей();    
    НаборЗаписей.Отбор.Склад.Установить(СкладОтбор);
    НачатьТранзакцию();
    Попытка                        
        НаборЗаписей.ОбменДанными.Загрузка = Истина;
        НаборЗаписей.Записать(Истина);
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
    КонецПопытки;
19 Eugeneer
 
21.09.22
09:45
+(18) стоит ли тут ставить блокировку.
20 rozer76
 
21.09.22
10:53
(19) нет, она будет установлена при записи
21 H A D G E H O G s
 
21.09.22
12:35
Ну что, поговорили о блокировках?
22 PLUT
 
21.09.22
12:48
единственный раз пришлось недавно использовать блокировку (при многопользовательской работе) для самописьного механизьма присвоения новых номеров для договоров (ну там префиксы-суффиксы и порядковый номер). это чтобы одинаковые номера не смогли юзвери присвоить договорам
23 ДедМорроз
 
21.09.22
22:53
(12) я отвечал только про объект БлокировкаДанных и блокировки на уровне сервера 1С,который для них используется.
Про блокировки на уровне СУБД отдельная история.
24 НафНаф
 
22.09.22
06:05
(0) у тебя же всё летает миллисекунды
25 Ryzeman
 
22.09.22
08:06
(0) Блин, не ожидал, что ты не знаешь зачем они нужны)
Пример из жизни - ты читаешь какие то данные из регистра, на их основе проделываешь какой то расчёт и записываешь в этот регистр изменённые данные.
Вот что бы другой процесс\пользователь не смог считать старые данные пока ты рассчитываешь новые - ставится блокировка, процесс который запросит эти же данные будет ожидать снятия блокировки.