Elasticsearch — Урок 5 Массовые операции и многое другое

В этом уроке вы узнаете, как управлять индексами в Elasticsearch. До этого мы узнали как работать с одним документом. В этом уроке вы узнаете о различных API, которые Elasticsearch предлагает для поддержки массовых операций. Они могут быть очень эффективными, когда надо перестроить весь индекс или выполнить операцию сразу над несколькими документами за один раз. Из-за способа хранения данных в Elasticsearch, количество осколков или маппинг полей не может быть изменен после создания индекса. Вы узнаете о Reindex API, с помощью него можно перестроить индекс с правильными настройками. Использование Elasticsearch для данных, основанных на времени, является очень распространенным шаблоном использования. Мы обсудим различные способы управления временными индексами. В этом уроке мы рассмотрим следующее:

Elasticsearch — Урок 5.5 Shrink API

Shrink API используется для сжатия существующего индекса в новый индекс с меньшим количеством осколков. Если данные в индексе больше не изменяются, индекс может быть оптимизирован в плане используемых вычислительных ресурсов при поиске и агрегации за счет уменьшения количества осколков. Количество осколков в индексе назначения должно быть фактором исходного индекса. Например, индекс с 6 первичными осколками может быть сжат в 3, 2 или 1 осколок. При работе с чувствительными к времени данными, такими как журналы, данные индексируются только в текущие индексы, а старые индексы в основном читаются. API-интерфейс Shrink не переиндексирует документ; он просто переводит индексные сегменты в новый индекс.

Читать далее Elasticsearch — Урок 5.5 Shrink API

Elasticsearch — Урок 5.4 Организация данных

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

Читать далее Elasticsearch — Урок 5.4 Организация данных

Elasticsearch — Урок 5.3 Ingest Node

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

В Elasticsearch 5.0 был введен узел ingest. Используя узел ingest, можно определить конвейеры для изменения документов до индексирования. Конвейер — это серия процессоров, каждый из которых работает с одним или несколькими полями в документе. Наиболее часто используемые фильтры Logstash доступны как обработчики. Например, используя grok фильтр для извлечения данных из файла журнала Apache в документ, извлечение полей из JSON, изменение формата даты, вычисление геоданных из местоположения и т. д. Возможности безграничны. Elasticsearch поддерживает множество обработчиков из коробки. Вы также можете разрабатывать свои собственные процессоры с использованием любых JVM-языков.

Читать далее Elasticsearch — Урок 5.3 Ingest Node

Elasticsearch — Урок 5.2 Reindex API

До Elasticsearch 5.0, чтобы изменить параметры индекса или изменить отображение индекса, приходилось создавать новый индекс и переиндексировать данные. Переиндексация большого индекса, как правило не простая задача, которая включает в себя чтение данных из источника, таких как база данных SQL, преобразование данных в документы и загрузка в Elasticsearch. При очень больших объемах данных используют процессоры пакетной обработки, такие как Hadoop. В зависимости от того, насколько большой индекс или насколько сложным является процесс ETL (Extract, Transform, Load), reindex может быть очень дорогостоящим. Чтобы решить эту проблему, был введен Reindex API. Оригинальный документ JSON, используемый для индексирования, хранится в поле _source, которое можно использовать в Reindex API для переиндексации документов. 

Читать далее Elasticsearch — Урок 5.2 Reindex API

Elasticsearch — Урок 5.1 Массовые операции

_bulk API

_bulk API идеально подходит для индексирования или удаления больших наборов данных. Поддерживаются операции создания, индексирования, обновления и удаления. Для каждого запроса должны быть предоставлены метаданные, такие как имя индекса, тип, уникальный идентификатор и маршрутизация. Каждый запрос разделяется новой строкой. Объемный запрос может быть смесью запросов создания, индексации, обновления и удаления. Узел, получающий массовый запрос (также известный как координационный узел), группирует запросы с по осколкам, к котором они принадлежат, и выполняет их параллельно (параллельная обработка зависит от количества cpu). Пулы потоков, которые выполняют одиночные и массовые запросы, независимы.

Читать далее Elasticsearch — Урок 5.1 Массовые операции

Elasticsearch — Урок 4 Индексирование и обновление данных

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

В этой уроке мы рассмотрим следующее:

Elasticsearch — Урок 4.5 Синхронизация между первичным осколком и репликой

Как вы знаете, данные в индексе разделены на один или несколько осколков. Разделив ваши данные на несколько осколков, Elasticsearch может масштабироваться за пределы того, что может сделать одна машина. Elasticsearch — это распределенная система, и системные сбои обязательно произойдут. Поскольку каждый осколок является независимым индексом Lucene, который может жить на любом узле кластера, Elasticsearch обеспечивает способ сохранения копии первичного осколка в другом узле кластера. Если узел, содержащий первичный осколок, терпит неудачу, то осколок реплики (копия), который существует в другом узле, продвигается до первичного.

Читать далее Elasticsearch — Урок 4.5 Синхронизация между первичным осколком и репликой

Elasticsearch — Урок 4.4 Translog и зачем он нужен

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

Читать далее Elasticsearch — Урок 4.4 Translog и зачем он нужен

Elasticsearch — Урок 4.3 Конкуренция при обновлении

Ранее мы обсуждали, что операция обновления должна сначала получить старый документ, применить изменения и переиндексировать документ. Если в процессе извлечения и изменения данных, кто-то еще изменить их, данные изменения будут утеряны и заменены вашими. Чтобы решить эту проблему, Elasticsearch увеличивает версию документа для каждой операции.

Читать далее Elasticsearch — Урок 4.3 Конкуренция при обновлении