Подтвердить что ты не робот

Советы по оптимизации при переносе данных в Sitecore CMS

В настоящее время я столкнулся с задачей импорта около 200 тыс. элементов из пользовательской реализации CMS в Sitecore. Я создал простую страницу импорта, которая подключается к внешней базе данных SQL, используя Entity Framework, и я создал все необходимые шаблоны данных.

Во время тестового импорта около 5 тыс. элементов я понял, что мне нужно найти способ сделать импорт намного быстрее, поэтому я решил найти некоторую информацию об оптимизации Sitecore для этой цели. Я пришел к выводу, что там не так много конкретной информации, поэтому я хотел бы поделиться тем, что нашел, и открыть для других, чтобы другие способствовали дальнейшей оптимизации. Моя цель - создать какой-то режим обслуживания Sitecore, который можно использовать при импорте больших количеств данных.

Самая полезная информация, которую я нашел, была на блоге Mark Cassidy http://intothecore.cassidy.dk/2009/04/migrating-data-into-sitecore.html. В нижней части этой статьи он предоставляет несколько советов, когда вы используете импорт.

  • Если вы переносите большое количество данных, попробуйте и отключите столько обработчиков событий Sitecore и все, что вы можете уйти.
  • Использовать BulkUpdateContext()
  • Не забывайте свой целевой язык
  • Если вы можете, сделайте поля разделяемыми и неверсифицированными. Это должно помочь скорости выполнения миграции.

Первое, что я заметил из этого списка, это класс BulkUpdateContext, о котором я никогда не слышал. Я быстро понял, почему в результате поиска на форуме SND и в документации в формате PDF не было обращений. Поэтому представьте мое удивление, когда я действительно проверил его, и обнаружил, что он улучшает создание/удаление элементов по меньшей мере в десять раз!

Следующее, на что я смотрел, было первым моментом, когда он в основном предлагал создать версию веб-конфигурации, которая имеет только необходимые основы для импорта. До сих пор я удалил все события, связанные с созданием, сохранением и удалением элементов и версий. Я также удалил объявления движка истории и системного индекса из элемента основной базы данных в веб-конфигурации, а также любые пользовательские события, расписания и поисковые конфигурации. Я ожидаю, что есть много других вещей, которые я мог бы посмотреть, чтобы удалить/отключить, чтобы повысить производительность. Трубопроводы? Графики?

Какие советы по оптимизации у вас есть?

4b9b3361

Ответ 1

Кстати, BulkUpdateContext() - очень вводящее в заблуждение имя - поскольку он действительно улучшает скорость создания элемента, а не скорость обновления элемента. Но, как вы также отмечаете, это значительно увеличивает скорость импорта: -)

Поскольку я написал этот пост, я добавил несколько новых вещей в свои обычные процедуры при импорте.

  • Регулярно сокращать базы данных. Они, как правило, растут большими и громоздкими. Сделать это; сначала перейдите в панель управления Sitecore → Database и выберите "Очистить базу данных". После этого сделайте регулярный ShrinkDB на своем сервере SQL
  • Отключить индексы, особенно при импорте в "основную" базу данных. Для справки см. http://intothecore.cassidy.dk/2010/09/disabling-lucene-indexes.html
  • Однако не пытайтесь импортировать в "master". Обычно вы обнаружите, что импорт в "сеть" намного быстрее, главным образом потому, что эта база данных по умолчанию не подключена к HistoryManager или другим гаджетам.

И если вы действительно приключенны, то есть вещь, которую вы могли бы попробовать, которую я рассматривал, чтобы попробовать себя, но так и не добрался. Они могут работать, но я не могу гарантировать, что они будут: -)

  • Попробуйте удалить все типы полей из App_Config/FieldTypes.config. Теория здесь заключается в том, что это должно по существу отключить всю Sitecore специальную обработку содержимого этих полей (например, обновление LinkDatabase и т.д.). Вам нужно будет вручную запустить восстановление LinkDatabase, когда это будет сделано с импортом, но что относительно небольшая цена для оплаты

Надеюсь, это немного поможет: -)

Ответ 2

Я предполагаю, что вы уже сделали это, но добавление кода внутри блока SecurityDisabler() может ускорить работу.

Мне было бы гораздо больше беспокоиться о том, как Sitecore работает с этими большими данными... если вы только один раз импортируете, кто волнует, сколько времени займет этот процесс. Это будет регулярное появление?