blog-post

Переиндексация Manticore Search с помощью mysqldump

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


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

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

Традиционный подход: Переиндексация на основе скриптов

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

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

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

Ключевые шаги:

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

    • Хранение текстово-индексированных столбцов: Убедитесь, что все текстово-индексированные столбцы хранятся как текст для оптимизации процесса дампа и восстановления. Этот формат более эффективен для передачи данных и минимизирует потенциальные проблемы во время переиндексации.
    • Создание новой таблицы: Создайте новую таблицу с желаемой конфигурацией для учета изменений.
  • Выполнение mysqldump:

    • Используйте следующую команду mysqldump для создания дампа данных таблицы:
      mysqldump -etc --replace -P7103 -h0 manticore rt_index_2 | mysql -P7103 -h0
      
  • Оптимизация таблицы (НЕОБЯЗАТЕЛЬНО. Не требуется, если включена auto_optimize, что является значением по умолчанию):

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

Анализ производительности и соображения

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

Тип таблицыНачальный размер (ГБ)
Текстово-индексированная3.5
Текстово-индексированная, хранящая4.4
Тип переиндексацииВремя переиндексации (минуты)
Переиндексация на основе скриптов94
mysqldump17

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

Ключевые соображения:

  • Дисковое пространство: Хотя mysqldump требует дополнительного дискового пространства во время процесса переиндексации, окончательный размер таблицы остается прежним после оптимизации. В нашем случае начальный размер таблицы составил 4.4 ГБ, и после процесса переиндексации размер таблицы увеличился до 8.9 ГБ. Однако после сжатия отладки размер был уменьшен обратно до 4.4 ГБ.
  • Структура таблицы: Конкретная структура таблицы может повлиять на производительность обоих методов. Может потребоваться экспериментирование, чтобы определить оптимальный подход для вашего конкретного случая.
  • Согласованность данных: Обеспечьте согласованность данных и избегайте конфликтов во время процесса переиндексации, особенно если таблица активно обновляется. Это может включать использование таких техник, как блокировка или асинхронные обновления.
  • Конфигурация оборудования и программного обеспечения: Производительность процесса переиндексации может зависеть от таких факторов, как аппаратные ресурсы (ЦП, память, дисковый ввод-вывод), конфигурация базы данных и задержка сети.

Заключение

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


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

Установить Manticore Search

Установить Manticore Search