Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Импорт большого количества элементов ИБ CIBlockElement::Add(...)

00 голосов
5
Здравствуйте.
Возникла проблема следующего характера.
Необходимо создать 35 000 элементов инфоблока из файла. Скрипт я написал, вот листинг того, что отвечает за добавление элементов:
Код
$rsSections = $sect_obj->GetList(array('ID'=>'ASC'), array('IBLOCK_ID'=>MAIN_CATALOG_IBLOCK_ID));
      while($arSect = $rsSections->Fetch()) $arSectCodeID[$arSect['CODE']] = $arSect['ID'];
      
      foreach($arVals as $arItem){
         $arFields = array(
                        'IBLOCK_ID'         =>   MAIN_CATALOG_IBLOCK_ID,
                        'IBLOCK_SECTION_ID'   =>   $arSectCodeID[$arItem['PARENT']],
                        'NAME'            =>   $arItem['NAME'],
                        'CODE'            =>   $arItem['CODE'],
                        'PROPERTY_VALUES'      =>   array(
                                                'ART'      =>$arItem['ART'],
                                                'STORAGE'   =>$arItem['STORAGE']
                                             ),
         );
         $new_item_id = $elem_obj->Add($arFields);
         if(!$new_item_id) echo('<p>'.$elem_obj->LAST_ERROR.' - '.print_r($arFields,1).'</p>');
      }

Ничего необычного, и на локальном веб-сервере все в порядке, но работает минут 25-30. Как бы сделать так чтобы работало меньше хотя бы формально(шаги например)?

ЗЫ. этот скрипт будет запускаться не пользователем, а автоматически.
спросил 25 Ноя, 13 от Onegai (100 баллов)

5 Ответы

00 голосов
ответил 18 Янв, 14 от Pomnep (13,960 баллов)
00 голосов
Код
$new_item_id = $elem_obj->Add($arFields);
Отключите индексацию элемента при добавлении. Сделайте
Код
$new_item_id = $elem_obj->Add($arFields, false, false, false);
А после создания всех элементов запускайте переиндексацию.
Цитата
bUpdateSearch - Индексировать элемент для поиска. Для повышения производительности можно отключать этот параметр во время серии добавлений элементов, а после вставки переиндексировать поиск. Не обязательный параметр, по умолчанию элемент после добавления будет проиндексирован в поиске.
CIBlockElement::Add
ответил 06 Май, 14 от Almarea (3,760 баллов)
00 голосов
Евгений Жуков: AJAX - это классно, но, боюсь здесь не поможет. Скрипт будет запускаться не через браузер.
ответил 31 Авг, 14 от Onegai (100 баллов)
00 голосов
Так, с этим вроде получше стало, но все равно не то, чего хотелось бы.
Теперь другой вопрос: Есть ли способ быстрого удаления элементов? А то удаление занимает не многим меньше времени чем добавление.
ответил 09 Янв, 15 от Onegai (100 баллов)
00 голосов
А какой тип инфоблока используете?
ответил 26 Апр, 15 от Dakost (580 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 29 Апр, 14 от Canon (260 баллов)
0 голосов
2 ответов
0 голосов
1 ответ
спросил 03 Янв, 14 от ufoman (390 баллов)
0 голосов
3 ответов
спросил 05 Окт, 13 от FarAway (340 баллов)