Как поддерживать индексы Sitecore Lucene в огромном веб-магазине доставки контента?
Я знаю, что индексы Lucene не могут быть разделены:
Sitecore хранит локальную копию индекса Lucene в файловой системе каждый экземпляр и не поддерживает обмен индексами между экземпляры.
Можно ли xcopy
индексы Lucene между CM и CD?
Есть ли какой-нибудь другой подход или рекомендация для поддержания индексов на 30+ серверах доставки контента?
Обновление:
Im полностью осознает, что компакт-диски должны начать собственное обновление индекса. С более чем 30 серверами CD Im думает, что, может быть, будет период времени, когда не все CD-сервер имеют одинаковый набор индексов. Я боюсь, что по некоторым причинам индексы потерпят неудачу на некоторых серверах CD и отслеживают, почему/где будет ад. Вот почему попытка обнаружить, есть ли альтернативный подход, когда индексы поддерживаются в одном месте (в некотором роде разделены) и в основном мгновенно реплицируются на все CD
Ответы
Ответ 1
Вам нужно включить History Engine для веб-базы данных CM и CD-серверов.
См. эту выдержку из руководства по масштабированию Sitecore.
Чтобы включить History Engine для базы данных Sitecore: В web.config файл, добавьте следующий раздел в /configuration/sitecore/databases/database, где id равно имя базы данных:
<Engines.HistoryEngine.Storage>
<obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel">
<param connectionStringName="$(id)" />
<EntryLifeTime>30.00:00:00</EntryLifeTime>
</obj>
</Engines.HistoryEngine.Storage>
<Engines.HistoryEngine.SaveDotNetCallStack>false</Engines.HistoryEngine.SaveDotNetCallStack>
Когда элемент Sitecore изменен, индексы Lucene обновляются немедленно в экземпляре Sitecore, где было сделано изменение. На удаленные серверы в многосерверной среде, индексы Lucene не обновляется сразу после изменения элемента. Индексы Lucene автоматически обновляются после интервала, определенного в файла web.config, в параметре Indexing.UpdateInterval и с помощью минимальное время ожидания между двумя последующими обновлениями, определенными в Indexing.UpdateJobThrottle.
Смотрите здесь
Ответ 2
Вы также можете рассмотреть возможность использования open-source Sitecore Lucene Refresher, который будет запускать операцию обхода индекса в памяти и будет передавать индекс обратно файловой системы, чтобы вы не потеряли содержимое индекса во время процесса перестройки. Это может по крайней мере помочь. Тогда, возможно, настройте какой-то агент для запуска этой операции обхода/перестройки в определенное время суток, чтобы все CD-серверы выполняли это одновременно синхронно.
Ответ 3
Ответ Уэсли Ломакс верен. Тем не менее, я хочу отметить, что я также участвовал в той же ситуации, когда у меня есть элементы в папке с данными в 1000-х годах. Я обновил настройки web.config следующим образом:
<!-- INDEX FOLDER
The path to the folder where the Lucene.Net search indexes are stored.
Default value: $(dataFolder)/indexes
-->
<setting name="IndexFolder" value="$(dataFolder)/indexes" />
<!-- INDEX UPDATE INTERVAL
Gets the interval between the IndexingManager checking its queue for pending actions.
Default value: "00:01:00" (1 minute)
-->
<setting name="Indexing.UpdateInterval" value="00:00:30" />
<!-- INDEX UPDATE JOB THROTTLE
Gets the minimum time to wait between individual index update jobs.
Default value: "00:00:01" (1 second)
-->
<setting name="Indexing.UpdateJobThrottle" value="00:00:01" />
Ответ 4
Следует отметить, что sitecore теперь рекомендует использовать Solr в этом сценарии и не попытаться синхронизировать несколько индексов Lucene:
Общие причины использования Solr вместо Lucene - это...
Если вы используете несколько серверов доставки контента (или планируете сделать это позже), используйте Solr. Solr автоматически работает в такой среде. Ты мог используйте Lucene, но вы должны убедиться, что индексы синхронизированы между серверами.
Поэтому вы должны использовать Solr, если вы планируете масштабировать свой сайт ( распределенная настройка с несколькими серверами).