2010-09-06 2 views
0

Эй, ребята, у меня есть вопрос о Сфинксе. Я использую Sphinx для индексации полнотекстовых поисков моих сайтов, и он работает как сон. На данный момент для создания индексов для всех моих баз данных требуется около 30 минут. Это нормально, поскольку я запускаю только скрипт индексирования каждый час.Улучшение индекса развития сфинксов

Но базы данных становятся все быстрее, и скоро я боюсь, что базы данных будут такими большими, что он не сможет выполнить этот процесс за 1 час. Конечно, я могу запускать его только один раз каждые 2 часа, но это не идеально.

Теперь мой вопрос: Является ли sphinx перестраиванием всех индексов каждый раз при запуске скрипта или добавляет только новые элементы, которые недавно были добавлены в базу данных (начиная с последнего запуска индекса)?

Мое чувство говорит, что оно полностью перестраивает его.

В случае, если это правда, возможно ли ТОЛЬКО элементы, которые в нем не были? Может ли это сделать время индексирования намного короче?

ответ

2

См Delta обновления индекса: http://sphinxsearch.com/docs/current.html#delta-updates

Идея заключается в том, чтобы поддерживать два индекса: основной и дельта. Вам нужно только создать индекс для нового добавленного/обновленного содержимого в индекс delta и периодически переходить на индекс основных.

+0

Спасибо, это именно то, что мне нужно! –

0

разделить ваш индекс

основными и дельта является самым обычным, если вы можете определить легко новые/обновленные строки.

Если не раскол, вы можете повторно переустановить много «частей» в одно и то же время.

с индексом 180M (случайным образом обновленным), где я каждый час имел среднее значение 5K новых строк.

Мое решение было

22 частичных индексов (потому что 24 ядра в сервере) 20 частичных индексов равна 2 «Дельта» индексы

сценарием я вычислить начальный и конечный идентификатор каждой части с этим правилом

последняя дельта начинается с первого идентификатора создается сегодня другой дельта начинается с первого идентификатора, созданного вчера заканчивается с первым идентификатором созданного сегодня

для частичного индекса было в основном основано на

  • Стартовая позиция-1 * ((первый идентификатор созданного вчера)/20)
  • конечное положение * ((первый идентификатор созданного вчера)/20)

последняя дельта была восстановить в течение нескольких секунд, 20 первый блок был построен в 10 минут

раньше, с монолитной версией полный индексом был восстановить в течение 4 часов (но была только 90M строк и сфинкс 0.9.9)