Недавно я работал над оптимизацией запросов к большим данным для некоторых предприятий компании.
Объем данных составляет примерно ежедневно110миллиардыdoc
о,И обычно необходимо провести некоторую обработку данных за последние два дня.,Время ответа на запрос относительно велико,Поэтому необходимо оптимизировать запросы времени ответа API.
Но вархитектурный уровеньс самого началаmapping
、Количество осколков、Были определены различные конфигурации, такие как узлы.,Некоторые модификации оказывают большее влияние на данные.,Таким образом, мы можем провести лишь некоторую оптимизацию в некоторых других аспектах.
Основываясь на использовании Es в предыдущей работе, я суммировал следующие предложения по оптимизации Es или то, что вам следует знать перед созданием кластера Es. Создавайте конфигурации, которые подходят вашему собственному бизнесу, с самого начала настройки, а не дожидайтесь возникновения проблем. во время поиска. Оптимизируйте еще раз. На данный момент возможностей для оптимизации не так много.
В основном оптимизируют по следующим аспектам:
1. Разумно распределите роли и настройте каждый узел. При развертывании кластера следует оценить, насколько большой кластер необходим для поддержки бизнеса с учетом различных обстоятельств. Это необходимо протестировать на основе производительности записи данных и поиска в текущей аппаратной среде, а затем динамически оценить на основе текущих бизнес-параметров, таких как:
2. Чем больше узлов, тем лучше увеличится давление на главный узел.
3. Больше осколков не значит лучше,отdeep pageing
С точки зрения, чем больше сегментов, тем больше накладные расходы JVM, тем больше нагрузка на пересылку на узел балансировки нагрузки (координации) и тем медленнее скорость запросов. Чем больше один шард, тем лучше. Вообще говоря, размер одного шарда контролируется на уровне 30-50 ГБ.
4. Оптимизация MPping:
1. Увеличьте интервал времени очистки, чтобы уменьшить частоту записи данных на диск и уменьшить количество операций ввода-вывода на диске.
2、Увеличиватьrefresh_interval
значение параметра,Цель состоит в том, чтобы уменьшитьsegment
Создание файлов,уменьшатьsegment
изmerge
частота,merge
произошло вjvm
серединаиз,может привести кfull GC
,Увеличиватьrefresh
Сократит поискизв реальном времени。
3、УвеличиватьBuffer
размер,Суть также в том, чтобы уменьшитьrefresh
извременной интервал,из-за причиненияsegment
Создание файлаиз Причина не только во временном пороге,кромеbuffer
Размер пространства,Он будет создан, когда он заполнится.。 Минимум по умолчанию 48MB < значение по умолчанию 10% места в куче < Максимум по умолчанию не ограничен
4. Старайтесь контролировать запись больших пакетов данных в периоды небольшого количества запросов на получение. Чем более концентрированы большие пакеты запросов на запись, тем лучше.
5. В ОС происходит fsync данных Lucene. кэш, его нужно отдать ОС cacheЗарезервировать достаточноиз Внутриотразмер,Любой, кто разбирается в настройке JVM, должен быть с этим знаком.,У меня есть некоторый опыт написания об этом раньше,Можно обратиться к。Сбор мусора и настройка JVM
6. Общий алгоритм минимизации. Если вы можете использовать меньший тип поля, используйте меньший тип ключевого слова.
7. ignore_above: зарезервированная длина поля, чем меньше, тем лучше.
8. Настройте поле _source и выполните фильтрацию по включению и исключению.
9. Магазин. Откройте еще одно место для хранения данных, чтобы сэкономить трафик.
Примечание. Для источника установлено значение false.,метаданные не сохраняются,Можно сохранить диск,и не влияет на поиск。но отключен_sourceНадо дважды подумать, прежде чем действовать:
reindex
Неверный,Могло быть измененоизmapping
Некоторые параметры не могут быть изменены,и не могу обновить индекс10. Отключить поле _all: поле _all содержит термин после сегментации слов всех полей. Его функция заключается в извлечении данных из всех полей без указания конкретных полей при поиске. До версии ES 6.0 его необходимо закрывать вручную.
11. Отключите index_options (используйте с осторожностью, высокопроизводительные операции): настройки слова используются для определения того, какой контент будет добавлен в файлы инвертированного индекса во время индексирования, например TF, docCount, postion, offsets и т. д. Параметры, которые уменьшают этот параметр, могут быть уменьшены. Загрузка ЦП при создании индекса. Однако в реальных сценариях трудно определить, будет ли бизнес использовать эту информацию, если только вы не уверены, что она не будет использоваться в начале. , удалять его не рекомендуется.
1、Запрещатьswap
2、использоватьfilter
заменятьquery
3. Избегайте глубокого пейджинга,Избегайте слишком большого размера одностраничных данных.,Можно обратиться к Байду или Таобаоизупражняться。esПредусмотрено два решенияscroll search
иsearch after
4. Обратите внимание на использование типа индекса.
5. Избегайте использования разреженных данных
6. Избегайте сильной связи бизнеса с одним индексом
7. Соглашение об именах
8. Архитектурный проект разделения горячей и холодной воды.
9、fielddata
:Упреждающая индексация при поиске,doc_value
дляindex Индекс времени вперед.
10、enabled
:Создавать ли инвертированный индекс。
11、doc_values
:форвардный индекс,Для полей, не требующих агрегации,Отключение прямой индексации экономит ресурсы.,Улучшить скорость запросов
12. Включите адаптивный выбор реплик (ARS), который поддерживается в версии 6.1 и включен по умолчанию в 7.0.
Конфигурация es по умолчанию — очень разумная конфигурация по умолчанию.,В большинстве случаев никаких изменений не требуется.,Если вы не понимаете смысл определенной конфигурации,Изменение конфигурации по умолчанию без проверки,может вызвать серьезныеизв результате。напримерmax_result_window
Эта настройка,Значение по умолчанию: 1 Вт.,Этот параметр определяет максимальный объем данных, возвращаемых на страницу данных подкачки.,Изменить необдуманнодля Большие значения приведут кOOM
。ESникакой серебряной пули,Невозможно существенно улучшить производительность ES путем изменения определенной конфигурации.,Обычно большинство настроек в заводской конфигурации уже оптимальны.,Есть лишь несколько настроек, связанных с конкретным бизнесом.,Лучшая конфигурация по умолчанию не может быть задана заранее.,Возможно, их придется установить вручную. О файлах конфигурации,Если вы не до конца понимаете смысл конфигурации,Не изменяйте его по своему желанию.
Распределение кучи jvm: 1 ГБ по умолчанию в версии 7.6,Это значение слишком мало,может легко привести кOOM
。Jvm heap
размер不要超过物理Внутри存из50%,Максимальный размер не должен превышать 32 ГБ (сжатый oop), тем больше памяти он может использовать для своего внутреннего кэша, но тем меньше памяти доступно операционной системе для использования для кэша файловой системы. Чрезмерная куча приведет к увеличению времени сборки мусора.
ES cluster
изиспользоватьглазизчто такое?В каких сценариях он в основном используется?,Например, он используется для хранения журналов транзакций.,Или ищите по сайту,Или для совокупного анализа данных. Для различных сценариев применения,Должны быть указаны различные схемы оптимизации.разделенный мозг
не могу избрать новогоизMasterузелиз Состояние,Кроме того, могут понадобиться еще какие-то отдельные узлы,Например, Kibana, Logstash и т.п. в системе ELK.