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