Почему бы не построить индексы в другом (возможно, временном) каталоге, а затем скопировать новые индексы поверх старых, когда индексатор завершит работу? Затем вы сокращаете время, в течение которого индексы не действительны, до времени, которое требуется для копирования файлов.
edit: представлены стратегии блокировки ниже
Не зная, как процессы, использующие индекс, используют его, трудно предложить хорошую стратегию блокировки. Если индексы получены, прочитаны и быстро освобождены и , у вас есть эксклюзивный контроль над каталогом индекса, вы можете записать файл блокировки в каталог индекса (что-то вроде indexlock.donotuse
) в начале Скопируйте индекс и удалите его, когда закончите. Если ссылки на индексы хранятся в течение длительного времени, подход с блокировочным файлом все еще будет работать, но вам потребуется более сложная координация.
Вы также можете хранить метаданные управления версиями индекса в самом индексе и размещать обновленный индекс рядом со старым. Затем, когда вы приступите к чтению из индекса, проверьте, существует ли более новый, прежде чем использовать тот, который у вас есть.