Медленное индексирование Elasticsearch с использованием типа данных соединения - PullRequest
2 голосов
/ 25 марта 2020

У нас есть индекс с типом соединения, и скорость индексации очень низкая. В лучшем случае мы индексируем 100 / se c, но в основном около 50 / se c, время варьируется в зависимости от размера документа. Мы используем несколько потоков с. NET Nest при индексации, но как пакетная, так и одиночная вставка выполняются довольно медленно. Мы протестировали партии разных размеров, но пока не набираем скорости. Даже с небольшими документами, содержащими «метаданные», он медленный, но скорость резко уменьшается при увеличении размера документа. Размер документа в этом решении может варьироваться от небольшого до 6 МБ

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

Мы используем кластер из 3 узлов в Azure, все с 32 ГБ оперативной памяти и дисками премиум-класса SSD. Размер кучи Java установлен на 16 ГБ. Обмен отключен. Использование памяти на виртуальных машинах стабильно составляет около 60% от общего объема, но загрузка ЦП очень низкая <10%. Мы работаем с Elasticsearch v. 6.2.3. </p>

Краткая версия сопоставления:

"mappings": {
  "log": {
    "_routing": {
      "required": true
    },
    "properties": {
      "body": {
        "type": "text"
      },
      "description": {
        "type": "text"
      },
        "headStepJoinField": {
        "type": "join",
        "eager_global_ordinals": true,
        "relations": {
          "head": "step"
        }
      },
      "id": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },       
      "statusId": {
        "type": "keyword"
      },
      "stepId": {
        "type": "keyword"
      }
    }
  }
}
...