paint-brush
Понимание переиндексации Elasticsearch: когда проводить переиндексацию, лучшие практики и альтернативык@rocksetcloud
3,664 чтения
3,664 чтения

Понимание переиндексации Elasticsearch: когда проводить переиндексацию, лучшие практики и альтернативы

к Rockset9m2024/05/08
Read on Terminal Reader

Слишком долго; Читать

Независимо от того, являетесь ли вы опытным пользователем Elasticsearch или только начинаете свой путь, понимание переиндексации важно для поддержания эффективности кластера Elasticsearch.
featured image - Понимание переиндексации Elasticsearch: когда проводить переиндексацию, лучшие практики и альтернативы
Rockset HackerNoon profile picture
0-item


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


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

Понимание переиндексации Elasticsearch

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


Представьте свои индексы Elasticsearch как хорошо организованные библиотеки. Со временем книги, возможно, придется обновлять, переставлять или даже заменять. Переиндексация сродни перестановке библиотечных полок или обновлению книг, чтобы все было в порядке. Без этого ваша библиотека может стать дезорганизованной, что приведет к замедлению поиска и возможным неточностям в ваших данных.


Эта аналогия подчеркивает важность понимания переиндексации в Elasticsearch. Речь идет не только о копировании данных; речь идет о сохранении целостности вашей «библиотеки» для эффективного поиска и извлечения информации. Давайте посмотрим , когда требуется переиндексация и как ее всегда держать в курсе.

Когда необходима переиндексация?

Переиндексация становится необходимой, когда в ваших моделях данных или сопоставлениях Elasticsearch происходят изменения или когда вы хотите повысить производительность. В этом разделе мы рассмотрим эти сценарии более подробно, чтобы понять нюансы необходимости переиндексации.

Структурные изменения в моделях данных

Структурные изменения в моделях данных относятся к изменениям в том, как данные структурированы в Elasticsearch. Эти изменения могут включать в себя такие вещи, как добавление или удаление новых полей или изменение типов данных существующих полей.


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


Эти структурные изменения требуют переиндексации из-за подхода Elasticsearch «схема при записи». Elasticsearch индексирует данные по мере их поступления, и любые изменения в структуре данных могут привести к несоответствию между существующими данными и данными, записанными с использованием новой схемы. В результате без переиндексации поисковые запросы могут давать неожиданные или неточные результаты из-за несоответствия схемы элементов данных. Это может повлиять как на точность данных, так и на производительность поиска.

Сопоставление обновлений или изменений

Сопоставления служат образцом того, как данные индексируются и запрашиваются в Elasticsearch. Когда эти сопоставления изменяются, обычно требуется переиндексация.


Сопоставления определяют типы данных и свойства полей в Elasticsearch. Любое изменение этих сопоставлений влияет на то, как данные индексируются, хранятся и извлекаются. Например, изменение текстового поля на поле даты фундаментально меняет способ обработки и запроса данных. Elasticsearch обеспечивает согласованность данных на основе определений сопоставления. Изменения в сопоставлениях могут привести к несоответствию между существующими данными и обновленной схемой, если данные не будут переиндексированы.


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

Улучшения производительности и оптимизация индексов

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


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


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

Обновление вашего кластера

При обновлении Elasticsearch версии 6.X до 8.0 (текущая основная версия) и более поздних версий вам может потребоваться переиндексировать все индексы, созданные в версии 6. Структуры данных и базовые механизмы Elasticsearch значительно изменились между этими версиями, что требует переиндексации для совместимости и оптимальной производительности. .


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

Как запустить операцию переиндексации

Переиндексация в Elasticsearch стала возможной благодаря API Elasticsearch Reindex. API Reindex служит мостом между существующим индексом и новым индексом, который вы хотите создать или изменить. Его основная цель — обеспечить эффективную передачу данных из одного индекса в другой. Кроме того, вы также можете:


  • Выборочное копирование документов из исходного индекса в целевой индекс.

  • Применяйте сложные преобразования данных, такие как переименование полей или преобразование типов.

  • Фильтруйте данные по определенным критериям.

  • Управляйте процессом индексирования с помощью таких параметров, как регулирование и интервалы обновления.


Прежде чем использовать API Reindex, убедитесь, что целевой индекс, в который вы хотите переместить или преобразовать данные, создан и правильно настроен.


Чтобы запустить переиндексацию, вам необходимо сформулировать запрос POST к конечной точке _reindex , указав исходный и целевой индексы, а также любые желаемые преобразования или фильтры. Пример POST-запроса на переиндексацию может выглядеть следующим образом.


 POST /_reindex { "source": { "index": "source_index" }, "dest": { "index": "target_index" }, "script": { "source": "ctx._source.new_field = 'transformed value'" }, "query": { "term": { "category.keyword": "example" } } }


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


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

Лучшие практики переиндексации

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

Приоритизация резервного копирования данных

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


Исходный индекс должен по-прежнему существовать после переиндексации, однако фундаментальным принципом является всегда иметь надежную копию данных перед внесением существенных изменений.

Сначала проведите переиндексацию в контролируемой среде

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

Мониторинг использования ресурсов

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


GET /_nodes/stats


Это вернет ответ, который выглядит следующим образом.


 { "_nodes": { "total": 2, "successful": 2, "failed": 0 }, "cluster_name": "my_cluster", "nodes": { "node_id1": { "name": "node_name1", "process": { "cpu": { "percent": 30, } }, "jvm": { "mem": { "heap_used_percent": 40.3, "heap_used_in_bytes": 123456789, "heap_max_in_bytes": 256000000 } } }, "node_id2": { "name": "node_name2", "process": { "cpu": { "percent": 50, } }, "jvm": { "mem": { "heap_used_percent": 60.8, "heap_used_in_bytes": 210987654, "heap_max_in_bytes": 256000000 } } } } }


Если вы обнаружите, что переиндексация выполняется слишком интенсивно, вы можете ограничить этот процесс, установив параметр requests_per_second при отправке запроса на переиндексацию. Это добавит сон между пакетами на количество секунд, установленное параметром, чтобы обеспечить период восстановления между пакетами.

Проверка и подтверждение результатов

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

Альтернативные решения

Elasticsearch, несомненно, зарекомендовал себя как выдающееся решение в области поиска и аналитики NoSQL. Однако стоит изучить альтернативные решения, предлагающие уникальные подходы к индексированию и запросу данных, особенно такие, как Rockset.


Rockset — это облачная альтернатива Elasticsearch, предлагающая другой взгляд на индексацию и запрос данных. В отличие от подхода Elasticsearch «схема при записи», Rockset допускает бессхемный прием. Данные можно принимать и запрашивать без необходимости предварительного определения схемы, что обеспечивает большую гибкость в работе с постоянно меняющимися наборами данных без необходимости переиндексации.


В области управления индексами Rockset извлекает выгоду из своей конвергентной модели индексирования , в которой индекс строки, индекс столбца и индекс поиска создаются автоматически для данных по мере их приема. Это контрастирует с Elasticsearch, где индексы создаются пользователями, а структурные изменения часто требуют трудоемких процедур переиндексации.


Хотя Elasticsearch остается надежным решением для различных вариантов использования, изучение альтернатив, таких как Rockset, может быть полезным, особенно если вы обнаружите, что переиндексация в Elasticsearch становится частым занятием.

Заключение

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


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