Elasticsearch: «Один индекс с множеством шардов» против «Много индексов с одним шардом на индекс» - PullRequest
0 голосов
/ 27 октября 2019

Моя аппаратная конфигурация Elasticsearch имеет 3 узла:

  • 2 x data, master, загрузочный узел с 64 ГБ ОЗУ (30 ГБ для этого идут в JVM), 3 ТБ жесткого диска, 8 ядер каждый;
  • 1 главный + координирующий узел с 8 ГБ ОЗУ, 500 ГБ HDD, 2 ядрами.

Мои данные:

  • ≈ 5 миллиардов документов,которые занимают ≈ 1,5-2 ТБ дискового пространства в настоящее время (вырастут до 10 ТБ в год);
  • сложная структура, с большим количеством вложенных документов (которые включены в родительские), также поля в документах невообще стандартизирован (и не может быть), поэтому сопоставления индексов огромны;
  • данные не являются сверхурочными (например, журналы);

Мне нужно бытьПри поиске по любому полю в этих документах поиск выполняется только по всем документам через String Query API . Также во время поиска я использую sort , подсветка , total_hits_count и агрегирование терминов .

Лично я попробовал две попытки сохранить pr:

  • 1 индекс с 16 осколками - это приводит к увеличению времени индекса, но быстрой скорости поиска,Также регулярно происходили сбои узлов, потому что (я думаю) отображения были слишком большими, и у меня всегда было около 95-99 ОЗУ на узлах.
  • 16 индексов с 1 осколком на каждом , сназначенный псевдоним - этап индексации выполняется быстрее, однако поиск стал намного медленнее. Это текущая версия.

Я не понимаю, почему поиск по 1x16 намного быстрее, чем 16x1 ...


Итак, наконецКаков наилучший подход для хранения этих данных в ES на основе предоставленной информации?

Кроме того, каждый осколок в настоящее время весит 75-128 ГБ, когда рекомендуется сохранять размер осколка 20-50 ГБ, но я видел мнение и рекомендацию, чтобы оставить по 1 осколку на ядро. Поэтому мнения по поводу этой конфигурации также приветствуются.

...