Резервное копирование индекса Lucene - PullRequest
15 голосов
/ 05 мая 2011

Какова лучшая практика для резервного копирования индекса lucene, не переводя его в автономный режим (горячее резервное копирование)?

Ответы [ 4 ]

20 голосов
/ 12 мая 2011

Вам не нужно останавливать свой IndexWriter для создания резервной копии индекса.

Просто используйте SnapshotDeletionPolicy, который позволяет вам «защитить» данную точку фиксации (и все файлы, которые она включает)от удаления.Затем скопируйте файлы в этой точке фиксации в свою резервную копию и, наконец, освободите фиксацию.

Хорошо, если резервное копирование займет некоторое время - если вы не освободите точку фиксации с помощью SnapshotDeletionPolicy, IndexWriter не будет удалять файлы (даже если, например, они были слиты вместе).

Это дает вам непротиворечивую резервную копию, которая является образом индекса на определенный момент времени, не блокируя текущую индексацию.

Я написал об этом в Lucene in Action (2-е издание), и есть отрывок из книги, доступной (бесплатной) из http://www.manning.com/hatcher3, «Горячие резервные копии с Lucene», которая описывает это более подробноподробно.

2 голосов
/ 05 мая 2011

Этот ответ зависит от (а) насколько велик ваш индекс и (б) какую ОС вы используете.Он подходит для больших индексов, размещенных в операционных системах Unix, и основан на стратегии репликации Solr 1.3.

Как только файл создан, Lucene не изменит его, он только удалит его.Поэтому вы можете использовать стратегию жестких ссылок для создания резервной копии.Подход может быть следующим:

  • прекратить индексирование (и выполнить коммит?), Так что вы можете быть уверены, что не сделаете снимок во время записи
  • создайте копию вашей жесткой ссылкииндексные файлы (с помощью cp -lr)
  • перезапуск индексирования

cp -lr будет копировать только структуру каталогов, а не файлы, поэтому даже индекс 100 ГБ должен копировать менее чем засекунду.

1 голос
/ 05 мая 2011

По моему мнению, этого было бы достаточно, чтобы остановить любую текущую операцию индексации и просто взять копию файлов индекса.Также посмотрите на сценарий snapshooter от Solr, который можно найти в apache-solr-1.4.1/src/scripts, который по существу делает:

cp -lr indexLocation backupLocation

Другие варианты могут выглядеть на Directory.copy(..) подпрограмма для прогамматического подхода (например, использование того же каталога, который задан в качестве параметра конструктора для IndexWriter . Вас также может заинтересовать Snapshooter.java , который выполняет эквивалент скрипта.

0 голосов
/ 05 мая 2011

Создайте новый индекс с отдельным IndexWriter и используйте addIndexesNoOptimize (), чтобы объединить текущий индекс с новым. Это очень медленно, но позволяет сохранять работоспособность исходного индекса во время резервного копирования.

Однако вы не можете записать в индекс при слиянии. Поэтому, даже если он подключен к сети и вы можете запросить индекс, вы не сможете записать его во время резервного копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...