В настоящее время я столкнулся с задачей импорта около 200 тыс. элементов из пользовательской реализации CMS в Sitecore. Я создал простую страницу импорта, которая подключается к внешней базе данных SQL с помощью Entity Framework, и создал все необходимые шаблоны данных.
Во время тестового импорта около 5 тыс. элементов я понял, что мне нужно найти способ сделать импорт намного быстрее, поэтому я решил найти некоторую информацию об оптимизации Sitecore для этой цели. Я пришел к выводу, что конкретной информации не так много, поэтому я хотел бы поделиться тем, что нашел, и дать возможность другим внести свой вклад в дальнейшую оптимизацию. Моя цель — создать некий режим обслуживания для Sitecore, который можно было бы использовать при импорте больших объемов данных.
Самая полезная информация, которую я нашел, была в блоге Марка Кэссиди http://intothecore.cassidy.dk/2009/04/migrating-data-into-sitecore.html. Внизу этого поста он дает несколько советов, когда вы запускаете импорт.
- При переносе больших объемов данных попробуйте отключить как можно больше обработчиков событий Sitecore и всего, что вам сойдет с рук.
- Используйте BulkUpdateContext()
- Не забывайте свой целевой язык
- Если можете, сделайте поля общими и неверсированными. Это должно помочь ускорить выполнение миграции.
Первое, что я заметил в этом списке, был класс BulkUpdateContext, поскольку я никогда о нем не слышал. Я быстро понял, почему поиск на форуме SND и в документации в формате PDF не дал результатов. Так что представьте мое удивление, когда я действительно протестировал его и обнаружил, что он улучшает создание/удаление элементов как минимум в десять раз!
Следующим, на что я обратил внимание, был первый пункт, где он в основном предлагает создать версию веб-конфигурации, в которой есть только самое необходимое для выполнения импорта. Пока что я удалил все события, связанные с созданием, сохранением и удалением элементов и версий. Я также удалил механизм истории и объявления системного индекса из элемента основной базы данных в веб-конфигурации, а также любые пользовательские события, расписания и конфигурации поиска. Я ожидаю, что есть много других вещей, которые я мог бы удалить/отключить, чтобы повысить производительность. Трубопроводы? Расписания?
Какие у вас есть советы по оптимизации?