|
Добавить данные в независимый регистр сведений
| ☑ |
0
Мультук
гуру
06.06.22
✎
13:50
|
Есть независимый регистр сведений.
Например:
ДополнительныеСведения
- Объект / измерение
- Свойство / измерение
- Значение / ресурс
В нем (например) 10 млн записей (много).
Мы запросом получаем (ахалай-махалай) таблицу значений тз с аналогичной структурой (например 100 тыс строк).
Задача простая.
Новые записи добавить, старые обновить, записи которых нет в таблице - в регистре не трогать.
Вместо тривиального кода, нужно что-то пошустрее:
Для каждого Об из ТЗ Цикл
Менеджер = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
Менеджер.Объект = об.Объект;
Менеджер.Свойство = об.Свойство;
Менеджер.Значение = Об.Значение ;
Менеджер.Записать(Истина);
КонецЦикла;
|
|
1
Ryzeman
06.06.22
✎
13:53
|
Через СоздатьНаборЗаписей(), но это не сильно ускорит.
Прямым запросом сделать UPDATE - быстрее всего.
|
|
2
timurhv
06.06.22
✎
13:53
|
Свойство - везде одно и тоже?
|
|
3
timurhv
06.06.22
✎
13:54
|
Можно по нему отбирать, прочитать, выгрузить, в ТЗ поправить - загрузить, записать.
|
|
4
Мультук
гуру
06.06.22
✎
13:55
|
(2) Так нельзя - будет нехорошо.
|
|
5
palsergeich
06.06.22
✎
13:59
|
(0) 10 млн это разве много?
Фигани в потоков 10-15 и не занимайся ерундой.
было бы 100-150 лямов - можно было бы подумать и о непосредственно загрузке в скуль
|
|
6
1Сергей
06.06.22
✎
14:01
|
Транзакции ещё не предлогали?
|
|
7
timurhv
06.06.22
✎
14:03
|
(4) Почему? Вроде можно наложить блокировку по свойству, запросом готовую таблицу собрать, загрузить таблицу в набор записей (именно загрузить, а не добавлять записи, так быстрее).
|
|
8
timurhv
06.06.22
✎
14:12
|
Протестировал, 90тыс записей обновилось за 9 сек в файловом режиме (отбор по свойству).
|
|
9
Мультук
гуру
06.06.22
✎
14:26
|
(7) (8)
Регистр сведений
{еще всякое}
Об1 Св1
Об2 Св1
Об3 Св1
Табл значений
Об4 Св1
Можно увидеть код который оставит записи об1, об2, об3 и добавить запись из табл. значений ?
|
|
10
timurhv
06.06.22
✎
14:48
|
(9) Код - нет, вот алгоритм:
- блокировка на регистр по СВ1 (чтобы не записали свойство, пока мы обновляем все записи по СВ1);
- запросом получаете все записи регистра с отбором по свойству + полное соединение записей регистра с ТЗ (с конструкцией "ЕСТЬNULL(ТЗ.Объект, РС.Объект) КАК Объект, ЕСТЬNULL(ТЗ.Свойство, РС.Свойство) КАК Свойство, ЕСТЬNULL(ТЗ.Значение, РС.Значение) КАК Свойство", соединение по объекту и свойству);
- выгружаете в новую таблицу значений;
- создаете набор записей, отбор по СВ1;
- набор записей не считываете, просто делаете загрузить таблицу из запроса;
- записываете набор записей;
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший