0
Nedomolkov_
Ivan
04.08.26
✎
14:14
|
Регламентный расчёт пишет в независимый регистр сведений (периодичность День), порядка 8 400 строк за прогон. Сделано в лоб: МенеджерЗаписи.Записать() в цикле.
Переписал на набор записей: отбор по периоду, Прочитать(), заместить строки, Записать(Истина) одним вызовом. На тех же данных разница в десятки раз.
Дальше начинается спор. Схема "прочитал период -> заместил" даёт окно: параллельный сеанс успевает записать строку этого же периода, и при замещении она молча пропадает. Построчный менеджер записи блокирует по ключу и от этого защищён.
Моя позиция: для регламента, который по замыслу крутится раз в сутки одним фоновым заданием, это перестраховка. Защита от двойного запуска - отдельная задача (управляемая блокировка, проверка активных заданий), и решать её надо там, а не отказом от пакетной записи в принципе.
Интересно, что видели в бою:
1. Кто-нибудь реально ловил потерю чужих строк на замещении периода? Какая была схема?
2. Если пишете пакетно - блокировку берёте на период целиком или на период+измерение?
Повод для вопроса: гонял эту задачу через несколько ИИ-агентов. Двое переписали на пакетную запись, третий отказался ровно с аргументом про lost update. Спор показался осмысленным независимо от того, кто его начал.
|
|
|
1
Dmitrii
гуру
04.08.26
✎
14:26
|
Наверное при пакетной записи правильным было бы устанавливать блокировку. На период или на период+измерение - зависит уже от конкретики.
>> ...это перестраховка
Возможно.
Но если какая-то фигня может произойти, она обязательно произойдёт. Рано или поздно.
Если есть способ её избежать, лучше её избежать.
|
|