Что загружается в память кроме инвертированного индекса в Elasticsearch, что делает его таким быстрым в поиске? - PullRequest
0 голосов
/ 05 декабря 2018

Что есть в памяти Elasticsearch, что делает поиск таким быстрым?Все jsons находятся в памяти, или только инвертированный индекс и отображение будут в памяти 24 * 7 ??

1 Ответ

0 голосов
/ 06 декабря 2018

Это хороший вопрос, и короткий ответ таков:

Не только данные, хранящиеся в памяти, делают поиск Elasticsearch таким быстрым

Инвертированные индексы не гарантируютсявсегда храниться в памяти.Мне не удалось найти прямое доказательство, поэтому я сделал вывод из следующего:

  • Сегменты индекса могут не загружаться в память полностью (см. _cat/segments выходной параметрsize.memory)
  • самый первый совет в Настройка для скорости поиска :

    Предоставление памяти кешу файловой системы

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

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

ИтакElasticsearch хранит оригинальные JSON-файлы в памяти?

Нет, он хранит их в специальном поле с именем _source.Получить его не быстро, поэтому сценариев доступ к _source может быть медленным в исполнении.

Существуют ли другие структуры данных, которые делают Elasticsearch быстрым?

Данапример, те, которые используются для агрегирования:

  • doc_values, которые ориентированы на столбцы для полей с точными значениями (эта функция делает Elasticsearch немного Столбец БД ), но, опять же, он изначально не находится в памяти и «кэшируется» при частом использовании;
  • fielddata, который выполняет аналогичную работу, нодля text полей;на самом деле он хранится в памяти, но он неэффективен и по умолчанию отключен.

Что еще делает Elasticsearch для ускорения поиска?

Он использует больше кэширования: Кэширование запросов Shard и Кеш запросов узлов .Как видите, это не так просто, как «просто поместить данные в память».

Надеюсь, это поможет!

...