[Перевод] Переиндексация в Manticore Search с использованием mysqldump

a91cbc3e3fe893da960fd152e1d0427c.png

Эта статья написана Мариусом Матилионисом, старшим разработчиком и экспертом по Manticore Search в компании Ivinco. Ivinco специализируется на предоставлении передовых решений для поиска, оптимизации баз данных, управлении инцидентами и настройке систем мониторинга, помогая бизнесам достигать более быстрых, эффективных и масштабируемых операций.

Понимание проблемы

Полная переиндексация крупных таблиц в Manticore Search может быть трудоемкой и ресурсозатратной задачей. Когда в конфигурацию таблицы вносятся значительные изменения, такие как модификация исключений или структуры данных, часто требуется полная переиндексация, чтобы обеспечить точность поисковых результатов.

Традиционный подход: переиндексация с помощью скриптов

Традиционный метод предполагает написание пользовательских скриптов, которые перебирают документы, анализируют их и отправляют в таблицу. Хотя этот подход обеспечивает гибкость, он может быть медленным, особенно для больших объемов данных. Основное узкое место в производительности связано с итеративным характером процесса, что может приводить к значительным накладным расходам.

Более эффективный подход: использование mysqldump

mysqldump — мощный инструмент для резервного копирования и восстановления баз данных MySQL — может быть эффективно использован для упрощения процесса переиндексации в Manticore. Прямое дампирование и восстановление данных таблицы позволяет значительно сократить время, необходимое для этой операции.

Основные шаги:

  1. Подготовка таблицы:

    • Сохранение текстовых индексированных столбцов:  Убедитесь, что все текстовые индексированные столбцы сохранены в формате stored. Только так их значения не потеряются при восстановлении из дампа.

    • Создание новой таблицы:  Создайте новую таблицу с нужной конфигурацией, чтобы учесть внесенные изменения.

  2. Выполнение mysqldump:
    Используйте следующую команду для дампа данных таблицы:

    mysqldump -etc --replace -P7103 -h0 manticore rt_index_2 | mysql -P7103 -h0  
  3. Оптимизация таблицы (ОПЦИОНАЛЬНО. Не требуется, если включена auto_optimize, что установлено по умолчанию):

    • Запуск оптимизации (optimize table rt_index_2 option sync=1):  После переиндексации размер таблицы составил 8,9 ГБ. Процесс оптимизации помогает освободить место на диске (после оптимизации размер таблицы уменьшился до 4,4 ГБ) и оптимизировать структуру таблицы. Этот шаг важен для обеспечения максимальной производительности и снижения нагрузки на хранилище.

Анализ производительности и рекомендации

Наши тесты показали значительное улучшение производительности при использовании mysqldump:

Тип таблицы

Начальный размер (ГБ)

Текстовые индексированные

3,5

Текстовые индексированные (stored)

4,4

Тип переиндексации

Время переиндексации (минуты)

Переиндексация через скрипты

94

Переиндексация через mysqldump

17

Как видно, хотя сохранение текстовых индексированных столбцов увеличивает начальный размер таблицы на 25% (с 3,5 ГБ до 4,4 ГБ), это значительно сокращает время переиндексации с 94 минут до 17 минут, что дает ускорение в 6 раз.

Ключевые моменты для учета:

  • Место на диске:  Хотя mysqldump требует дополнительного места на диске во время переиндексации, окончательный размер таблицы остается прежним после оптимизации. В нашем случае начальный размер таблицы составлял 4,4 ГБ, а после переиндексации увеличился до 8,9 ГБ. Однако после сжатия размер вернулся к 4,4 ГБ.

  • Структура таблицы:  Конкретная структура таблицы может влиять на производительность обоих методов. Возможно, потребуется экспериментировать, чтобы найти оптимальный подход для вашего случая.

  • Согласованность данных:  Убедитесь в согласованности данных и избегайте конфликтов во время переиндексации, особенно если таблица активно обновляется. Для этого могут потребоваться методы блокировки или асинхронных обновлений.

  • Конфигурация оборудования и ПО:  Производительность процесса переиндексации может зависеть от таких факторов, как ресурсы оборудования (CPU, память, дисковый ввод-вывод), конфигурация базы данных и задержки в сети.

Заключение

Использование mysqldump для переиндексации позволяет значительно сократить время и ресурсы, необходимые для этой важной задачи. Эта оптимизация особенно полезна для крупномасштабных поисковых таблиц, где производительность и эффективность имеют критическое значение. При выборе стратегии переиндексации тщательно оценивайте специфические потребности вашего приложения и инфраструктуры, чтобы определить наиболее подходящий подход.

Мариус Матилионис — старший разработчик и эксперт по Manticore Search в компании Ivinco, которая специализируется на поисковых решениях, оптимизации баз данных, управлении инцидентами и настройке систем мониторинга. Эта статья отражает его опыт в оптимизации Manticore Search для крупномасштабных приложений.

© Habrahabr.ru