Существует две основные стратегии построения поисковых индексов:
- Индексатор внутренний для сервера базы данных, который индексирует на лету, когда записи вставляются или удаляются.
- Индексатор внешний для базы данных (которая может быть, а может и не быть СУБД, поэтому я оставляю слово сервер), который периодически индексирует.
Первая стратегия имеет очевидное преимущество, заключающееся в том, что она ближе к реальному времени, но, возможно, имеет огромный недостаток в производительности. Большинство серверов баз данных с внутренними индексаторами имеют проблемы с производительностью (или отсутствующие функции), см., Например, Джефф Этвуд, обсуждающий проблемы производительности в SQL Server 2008 в своем блоге о добавлении второго сервера для stackoverflow .
Вторая стратегия не так эффективна в режиме реального времени, но, как правило, имеет лучшую производительность. К сожалению, это также означает, что, поскольку она не является встроенной, ее нужно каким-то образом вызывать извне.
Очевидно, что у вас нет выбора с Sphinx , поскольку он является внешним индексатором. Вы должны вызвать индексатор сфинксов из cron или другого механизма планирования.
Чтобы ускорить индексирование, просто запускайте его часто из cron. Если это вызывает проблемы с производительностью, вам необходимо реализовать стратегию live-обновления , которая включает в себя очень частую индексацию новых записей в дельта-индекс, а затем периодически объединяет дельта-индекс в первичный индекс. Это будет сделано за пределами Django, поэтому ничего не повлияет на django-sphinx .