|
Эффективный по времени способ создания справочника
| ☑ |
0
Мимохожий Однако
29.12.14
✎
20:49
|
Задачка немного теоретическая. Есть некоторая таблица значений с полями "Наименование" и "ДопРеквизит".
Способ 1. Перебираем ТЗ и для каждой строки используем СоздатьЭлемент().
Есть ли "волшебный" способ массового создания справочника Номенклатура быстрее Способа 1?
|
|
1
Aleksey
29.12.14
✎
20:51
|
да
НачатьТранзакцию()
|
|
2
Garykom
гуру
29.12.14
✎
20:56
|
(1) +1
+2 это прямая запись в таблицу (если sql сервер)
|
|
3
Мимохожий Однако
29.12.14
✎
21:00
|
Надо померить производительность. Вещь очевидная, но как-то не обратил внимания. (1),(2) спасибо
|
|
4
karabas11
29.12.14
✎
21:30
|
(0) Распараллелить запись
|
|
5
MrStomak
29.12.14
✎
22:15
|
(1), (2) У автора, суда по СоздатьЭлемент(), вовсе не dbf-ная семёрка.
|
|
6
Garykom
гуру
29.12.14
✎
22:23
|
(5) эээ и что оба метода хотите сказать не работают? ))
|
|
7
MrStomak
29.12.14
✎
22:28
|
(6) Нет, просто НачатьТранзакцию в 8ке не так сильно ускоряет. Прямо в sql или параллельная запись (тоже при sql) - это значительно изменит расклад.
|
|
8
Мимохожий Однако
29.12.14
✎
22:44
|
Сделал замер в обработке. Нашел строку с максимальным временем. Это был запрос... в цикле. Поменял код.
Ускорилось раз в 10.
А команда НачатьТранзакцию() дала минимальный эффект.
(5) У автора восьмёрка ))
|
|
9
Garykom
гуру
29.12.14
✎
22:59
|
(7)(8) НачатьТранзакцию() и ЗафиксироватьТранзакцию() просто готовить нужно правильно...
типа вплоть до подбора оптимального кол-ва элементов записываемых в каждой транзакции...
|
|
10
Garykom
гуру
29.12.14
✎
23:01
|
(9)+ т.е. например если требуется записать 10 000 элементов то бесполезно писать их в одной транзакции
но вот если писать их кусками по 200-300 штук то ускорение в несколько раз будет ))
|
|
11
Мимохожий Однако
29.12.14
✎
23:02
|
(9)Я с этим не спорю. В моём частном случае важнее оказался мой кривой код. Рекомендации по разбивке понадобятся при больших объемах. Спасибо.
|
|
12
MrStomak
29.12.14
✎
23:20
|
(10) ну дык это же семерочный глюк\фича с подбором элементов транзакции. Сейчас вот на 8ке перезаписывал 5000+ элементов в файловом варианте без транзакции - 17 сек, в одной транзакции - 15 сек, в транзакциях по 200 штук - все равно 15 сек. Все повторено по 10 раз, результат стабильный. Возможно, с созданием ситуация и другая, не знаю.
|
|
13
Garykom
гуру
29.12.14
✎
23:45
|
(12) update с insert'ом не попутал? )) при перезаписи еще поиск идет - который все и сжирает в твоем случае
ЗЫ а подбор нужен когда оперативки не хватает, чтобы все в памяти держать - оптимальными кусками писалось сразу из памяти
|
|