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 (optimize table rt_index_2 option sync=1): После процесса реиндексации размер таблицы составил 8.9GB. Процесс оптимизации помогает вернуть дисковое пространство (после оптимизации размер таблицы составил 4.4GB) и оптимизировать структуру таблицы. Этот шаг имеет решающее значение для обеспечения оптимальной производительности и сокращения накладных расходов на хранение.

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

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

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

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

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

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

Заключение

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


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

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

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