Знакомство с ES в первый раз (серия ES первая)

Elasticsearch
Знакомство с ES в первый раз (серия ES первая)

предисловие

"Мир уже наводнен данными. За прошедшие годы мы были поражены объемом данных, которые передаются и генерируются между нашими системами. Существующие технологии сосредоточены на том, как обращаться с хранилищем данных и как структурировать эти данные. Это приятно , пока вам на самом деле не понадобится делать анализ решений в реальном времени на основе этих данных, а это совсем не так.Распределенная, масштабируемая, работающая в режиме реального времени система поиска и анализа данных. все что тебе нужноисследовать все,все ещеСтатистика структурированных данных в режиме реального времени, или их комбинация, Elasticsearch — это не только полнотекстовый поиск, мы также представимСтруктурированный поиск, анализ данных, комплексная обработка человеческого языка, географическое положение и межобъектные связиЖдать".

                -- [Elasticsearch: 权威指南 » 前言](https://www.elastic.co/guide/cn/elasticsearch/guide/cn/preface.html)

Вышеприведенный абзац взят изElasticsearch: 权威指南, что говорит нам о супервозможностях, которыми обладает ES. Эта серия статей в основном основана на фактических сводках боевых действий на работе,Конечная цель — обсудить, как плавно перейти на ES (с использованием стека технологий Java) в соответствии с существующими бизнес-требованиями, чтобы компенсировать ограничения реляционных баз данных и улучшить нашу способность обрабатывать данные.

Эта серия предварительно запланирована на четыре части.

  • Часть 1: Говоря о том, почему нам нужно использовать ES, а также связанные фундаментальные концепции
  • Часть II: Мы обсуждаем стратегию переноса данных Mysql -> ES, выбор технологии и стратегию синхронизации, выбранную в различных сценариях.
  • Третья часть: мы реализуем интеграцию весенней загрузки и ES и используем API, предоставляемый ES, для "перевести sql"
  • Четвертая часть: мы используем предыдущую техническую основу, чтобы попытаться решить реальный объем данных одной таблицы РСУБД в десятки миллионов, и как использовать ES для решения этой головной боли в случае объединения нескольких таблиц.

Без дальнейших церемоний, давайте сначала посмотрим, зачем нам нужно использовать ES.

1. Зачем вам нужен Elasticsearch

1, быстро быстро

Основная причина, по которой мы используем ES, заключается в том, что ES работает быстро. Особенно, когда объем данных достигает десятков миллионов или более, независимо от того, оптимизируется ли отдельная таблица реляционной базы данных путем добавления индексов, подбаз данных и подтаблиц, окончательный эффект оптимизации часто бывает неудовлетворительным (а сложность подбазы данных и подтаблиц -tables высока) , а ES легко может хранить десятки миллионов и миллиарды томов данных.

Для достижения этой скорости ES используетКонечный преобразователь состоянийРеализован полнотекстовый поискПеревернутый индекс, в котором реализован метод хранения числовых данных и данных геолокацииБКД-деревои хранилище столбцов для аналитики. А поскольку ES по умолчанию индексирует все поля, мы можем получать данные в режиме реального времени при выполнении запросов.

2. Больше, чем полнотекстовый поиск

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

select * from author where name like '%鲁迅%'.

Когда объем данных велик, даже если мы создадим индекс для поля имени, приведенный выше SQL не будет проходить через индекс (не соответствует принципу крайнего левого префикса) и выполнит полное сканирование таблицы, а производительность можно представить. Однако, если вышеуказанный запрос реализован в ES, это очень просто.Благодаря стратегии хранения и индексации, принятой ES, желаемый результат может быть запрошен в режиме реального времени.

Однако, будь то точный запрос или нечеткий запрос, по сути, это мышление «традиционной реляционной базы данных».Механизм поиска и анализаПоисковик с абстрактной точки зрения делает три вещи:Собирайте данные, создавайте индекс данных и ранжируйте релевантность. Сбор данных в ES осуществляется нами 1. Например, синхронизация данных в реляционной базе данных с ES 2. Затем ES проиндексирует синхронизированные данные для облегчения последующих запросов 3. Последний шаг также является самым важным Следующий шаг ранжирование по релевантности.При таком большом количестве данных не все имеют одинаковую степень важности, поэтому для поисковых систем очень важно качество ранжирования, которое определяет уровень качества поиска.

Это также относится и к ES.Когда мы используем запрос, мы не только запрашиваем данные, но ES также может извлекать данные, полученные по ключевому слову, в соответствии сРейтинг релевантности. Это также больше соответствует нашему человеческому образу мышления, если предположить, что мы используем ключевое слово «Лу Синь» для запроса не всех статей и отчетов, содержащих ключевые слова Лу Синя. Вместо этого я надеюсь получить самые важные работы, личный опыт, жизненный опыт, историческую оценку и другую информацию о Лу Сине, которую все считают наиболее важной.

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

3. Полная экосистема

ElasticSearch — это основной стек технологий Elastic, в который также входят Logstash, Filebeat, Kibana и другие.

Мы можем использовать технологический стек, предоставляемый ES, для достижения различных целей, например, распределенная система сбора журналов обычно создается с помощью ELK + Filebeat, а журналы каждого микросервиса собираются и передаются в конвейер Logstash через Filebeat для обработки и затем logstash передается в конвейер Logstash.ES, финальное отображение Kibana, журналы запросов.

4. Масштабируемость

Для большинства баз данных обычно требуются очень большие изменения в приложении, чтобы воспользоваться преимуществами дополнительных ресурсов, которые были масштабированы. Напротив, ElastiSearch по своей природе распределен: в кластере ES мы можем добавлять и удалять узлы в любое время, и кластер будет равномерно перераспределять все данные. Он знает, как улучшить масштабируемость и доступность, управляя несколькими узлами. Это также означает, что вашему приложению не нужно обращать внимание на эту проблему.


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

2. Основные концепции

Независимо от того, разрабатываем ли мы или поддерживаем кластеры ES, важно понимать основные концепции ES. Ниже мы используем "От малого к большому” подход к внедрению основных концепций ES.

1. Поля

Поле - это наименьшая независимая единица данных в ES. Каждое поле имеет свой тип данных (вы можете определить тип данных, который переопределяет автоматическую настройку ES). Мы также можем указать, следует ли анализировать, токенизировать и т. д. для одного поле.

Основные типы данных — строковые, числовые, DateDate, логические, двоичные, диапазонные и т. д. Сложные типы — объектные и вложенные.Обратитесь к официальному введению

2. Документы

Понятие документа в ЭС эквивалентно ряду данных в СУБД, разница в том, что хранение документов в ЭС напрямую хранится в формате json (т.е. может быть вложенным), а не "сплющивать" данные как в RDBMS Storage, что также является большой разницей между Nosql и реляционными базами данных.

Ниже приведен пример документа

{
   "_id": 3,
   “_type”: [“your index type”],
   “_index”: [“your index name”],
   "_source":{
   "age": 28,
   "name": ["daniel”],
   "year":1989,
}
}

3. Отображение

«Отображение — это процесс определения того, как документ и содержащиеся в нем поля хранятся и индексируются».

То есть сопоставление определяет, как документы и поля хранятся и индексируются.С помощью сопоставления может быть определена следующая информация.

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

4. Указатель

В ES самая большая концепция хранения данных,Это набор многих документов с одинаковыми характеристиками.. Поскольку тип Type был постепенно упразднен после ES7.0, индекс изменился с «база данных«Концепция становленияФактическииз"поверхность«Концепция, мы можем аппроксимировать ее как таблицу в РСУБД, но следует отметить, что Индекс — это только логическая концепция, а реальные данные хранятся отдельно в каждом шарде.

5. Осколки

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

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

Существует два типа осколков:Основной осколок, осколок реплики

  • Основной сегмент: поскольку все данные будут храниться в основном сегменте,Первичный шард определяет верхний предел количества хранимых документов., но как только количество первичных сегментов индекса указано во время создания, количество первичных сегментов не может быть изменено, потому что при индексировании документа он хэшируется в соответствующий первичный сегмент по его первичному ключу (по умолчанию) ( Подобно стратегии маршрутизации подтаблиц подбазы данных РСУБД), поэтому, как только мы изменим количество основных сегментов, мы не сможем найти конкретный основной сегмент. Во время отображения мы можем установитьnumber_of_shardsзначение, максимальное значение по умолчанию — 1024.

  • Осколки реплик: мы можем указать любое количество осколков реплик для основного осколка в зависимости от фактических аппаратных ресурсов.Как упоминалось выше, каждый осколок может обрабатывать запросы, поэтому мы можемУвеличьте ресурсы осколков реплик (соответствующее улучшение аппаратных ресурсов) для повышения вычислительной мощности системы.. Точно так же при отображении вы можете передатьnumber_of_replicasпараметр для установки количества сегментов реплик на основной сегмент

Однако следует отметить, что для отказоустойчивости (потеря данных из-за простоя хоста узла)Основной сегмент и сегмент реплики не могут находиться на одном узле, чтобы предотвратить некоторую потерю данных из-за простоя узла..

6. Экземпляры и узлы

«Узел — это работающий экземпляр Elasticsearch, принадлежащий кластеру».

Узел — это работающий экземпляр ES, принадлежащий кластеру. Обычно мы развертываем одну ноду на одном сервере, но иногда, чтобы протестировать кластер, мы также можем запустить несколько нод на одном сервере для тестирования. Предположим, что когда мы запускаем узел и хотим присоединиться к существующему кластеру, мы можем настроить и изменить имя кластера в файле конфигурации, а такжеip + port, ЭП автоматически пройдет"Одноадресная передача", чтобы автоматически обнаружить кластер и попытаться присоединиться к кластеру.

Узлы делятся на следующие виды:

  • Узел, отвечающий требованиям мастера: отвечает за управление и настройку кластера, например за добавление и удаление узлов.
  • Узел данных: документ фактически хранится в узле данных, который отвечает за выполнение связанных операций, таких как CRUD, поиск, агрегирование и т. д.
  • Координирующий узел: Маршрутизация для обработки запросов, агрегация наборов результатов запросов, интеллектуальная балансировка нагрузки.
  • Узел приема: для предварительной обработки документа перед индексированием.
  • Узел машинного обучения: в основном используется для задач машинного обучения, но требуетBasic License.

Для подробного ознакомления с узлами ES вы можете обратиться кофициальная документация

7. Кластер

  • В ES кластеры создаютсяОдин или несколько узлов ESДа, каждый кластер имеет уникальное имя/идентификатор, который используется узлами для присоединения к кластеру.
  • В каждом кластере есть мастер-нода, в случае зависания мастер-ноды кластер может быть заменен другими нодами.

В ES также поддерживаются такие функции, как межкластерная репликация, межкластерное извлечение и т. д. Подробную информацию см.Cross-cluster replication,Search across clusters


В двух предыдущих разделах мы узнали о возможностях суперобработки данных ES и некоторых основных концепциях ES. Поскольку в Интернете было проведено много анализов принципа обратной индексации, используемого ES, я не буду подробно описывать здесь детали, а конкретный принцип рекомендует статью для справки:Секрет базы данных временных рядов (2) - индекс

Ссылаться на