Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!
Это ясно - само собой разумеется.
Но вопрос я ставил не "как сделать, чтобы работало", а именно "как оптимизировать" - это самое главное, как сократить количество запросов.
У меня такой же вопрос как оптимизировать?
Я добавляю 100000 записей из csv файла с помощью функции добавления элемента. За секунду у меня проходит лишь 100 записей. Для проверки сделал то же самое, но через mysql_query() - 10000 записей в секунду.
Получается, чтобы добавить в базу, мне нужно ждать 16 минут. Я их буду добавлять каждый день, в дальнейшем у меня будет и 1 000 000 записей и больше.
Помимо этой темы обратился в поддержку продукта, и ответа не последовало.
Поэтому отвечу сам.
1. Добавление ускоряется в 3-4 раза если удалить модуль поиска. Затем добавляю элементы $el->Add($Element) с bUpdateSearch = false. Минусы: - теряем модуль поиска, скорость добавления все равно не устраивает. Сойдет, если добавлять по 50-100 элементов за цикл.
2. Если элементов больше 50000 лучше вообще не использовать добавление битрикса. Выход из ситуации - свои таблицы + mysql_query или чтение из файлов. Это будет работать в десятки и сотни раз быстрее. Лично поверил на 1 000 000 записей.
Александр, я в общем к такому же выводу пришел. А не отвечают судя по всему из-за того, что ответа попросту нет...
Так что из решений и остается только:
1) Обязательное использование пошаговости
2) Добавление с отключенным поиском (bUpdateSearch = false) и затем уже переиндексация
3) Всякие самопальные оптимизации, вроде проверок на измененность, чтобы не обновлять то, что не изменилось
Так пока и делаю... В итоге на загрузку уходит до нескольких минут. А что делать?
Как насчет использования стандартного скрипта импорта. Вроде у него со скоростью проблем нет. Не реализовывал, но, думаю, из публички его можно дернуть.
Иван, да надо будет попробовать. Только он не совсем удовлетворяет. Либо придется переписывать, либо еще что. Функционал-то у него другой. Разве что подсмотреть, как в нем импорт реализован, и использовать оттуда функции в своем скрипте. Хотя я сомневаюсь, что там будет что-то относительно новое. Ну в общем глянем, когда время будет.
о. сейчас стоит похожая задача, практически идентичная =)
пока тоже отталкивался от $el->Add($Element). Элементов пока порядка 2000, даже на таких объемах оптимизация требуется. Была мысль вставлять записи в базу напрямую подготавливая обширные вставки, пока только мысль.
Иван подал хорошую идею посмотреть в сторону стандартного импорта, тоже сейчас буду его изучать.
Иван, в файле импорта (bitrix\modules\iblock\admin\data_import.php) ничего нет, что могло бы ускорить процесс. Быстрее он не будет работать. Тут та же процедура Add(). У меня грузил в базу в 2,5 раза дольше моей обработки с той же процедурой (моя 4 минуты, скрипт - 9 минут)
Дмитрий Олареско, если будешь использовать стандартный импорт, перепроверь! соответствует ли количество элементов в базе. Случается, что скрипт может не добавить элементы, и при этом в отчете ошибки = 0.
NightCat, если найдешь метод - обязательно пиши, это поможет многим :)