Этот блог написан Мариусом Матилионисом, старшим разработчиком и экспертом по 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) и оптимизировать структуру таблицы. Этот шаг имеет решающее значение для обеспечения оптимальной производительности и сокращения накладных расходов на хранение.
- Запустите Optimize (
Анализ производительности и соображения
Наши тестирования показали значительное улучшение производительности при использовании mysqldump
:
Тип таблицы | Исходный размер (ГБ) |
---|---|
Текстовый индекс | 3.5 |
Текстовый индекс с сохранением | 4.4 |
Тип реиндексации | Время реиндексации (минуты) |
---|---|
Реиндексация с помощью скриптов | 94 |
mysqldump | 17 |
Как видно, хотя хранение текстово-индексированных столбцов в виде сохраненных увеличивает исходный размер таблицы на 25% (с 3.5GB до 4.4GB), это значительно сокращает время реиндексации с 94 минут до 17 минут, что дает увеличение скорости в 6 раз.
Ключевые соображения:
- Дисковое пространство: Хотя
mysqldump
требует дополнительного дискового пространства во время процесса реиндексации, конечный размер таблицы остается прежним после оптимизации. В нашем случае исходный размер таблицы составил 4.4GB, а после процесса реиндексации размер таблицы увеличился до 8.9GB. Однако после компрессии отладкой размер был уменьшен обратно до 4.4GB. - Структура таблицы: Специфическая структура таблицы может повлиять на производительность обоих методов. Могут потребоваться эксперименты для определения оптимального подхода для вашего конкретного случая использования.
- Согласованность данных: Обеспечьте согласованность данных и избегайте конфликтов во время процесса реиндексации, особенно если таблица активно обновляется. Это может включать использование таких техник, как блокировка или асинхронные обновления.
- Конфигурация оборудования и программного обеспечения: Производительность процесса реиндексации может зависеть от факторов, таких как ресурсы оборудования (ЦП, память, ввод-вывод диска), конфигурация базы данных и задержка сети.
Заключение
Используя mysqldump
для реиндексации, мы можем значительно сократить время и затраты ресурсов, связанные с этой критической задачей. Эта оптимизация особенно полезна для крупных таблиц поиска, где производительность и эффективность имеют первостепенное значение. При рассмотрении стратегий реиндексации тщательно оцените конкретные потребности вашего приложения и инфраструктуры, чтобы определить наиболее подходящий подход.
Мариус Матилионис является старшим разработчиком и экспертом по Manticore Search в Ivinco , компании, специализирующейся на решениях для поиска, оптимизации баз данных, управлении инцидентами и настройках наблюдаемости. Этот блог отражает его опыт оптимизации Manticore Search для крупных приложений.