Частичное обновление в большой документ - PullRequest
0 голосов
/ 11 октября 2018

У меня проблема с производительностью.Мое приложение для чата.

Я разработал индекс отображения с вложенным объектом, как показано ниже.

{
  "conversation_id-v1": {
    "mappings": {
      "stream": {
        "properties": {
          "id": {
            "type": "keyword"
          },
          "message": {
            "type": "text",
            "fields": {
              "analyzerName": {
                "type": "text",
                "term_vector": "with_positions_offsets",
                "analyzer": "analyzerName"
              },
              "language": {
                "type": "langdetect",
                "analyzer": "_keyword",
                languages: ["en", "ko", "ja"]
              }
            }
          },
          "comments": {
            "type": "nested",
            "properties": {
            "id": {
              "type": "keyword"
            },
            "message": {
              "type": "text",
              "fields": {
                "analyzerName": {
                  "type": "text",
                  "term_vector": "with_positions_offsets",
                  "analyzer": "analyzerName"
                },
                "language": {
                  "type": "langdetect",
                  "analyzer": "_keyword",
                  languages: ["en", "ko", "ja"]
                }
              }
            }
            }
          }
        }
      }
    }
  }
}

** на самом деле имеет много полей

В документе около 4000вложенные объекты.Когда я вставляю данные в документ, он достигает максимальной скорости процессора до 100% и дискового ввода-вывода в случае записи.Коэффициент ввода около 1000 / с.

Как настроить для повышения производительности?

Аппаратное обеспечение

3x 2vCPUs 13 ГБ на GCP

1 Ответ

0 голосов
/ 11 октября 2018

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

Цитирование из документов :

Internally, nested objects index each object in the array as a separate hidden document.

Поскольку документ должен быть полностью переиндексирован при обновлении, вы индексируете 4000 документов за одно обновление.

Почему так много полей?

Причина, по которой вы указали в комментариях необходимость столь большого количества полей

I'd like to search comments in nested and come with their parent stream for display.

, заставляет меня думать, что вы можете смешивать две проблемы здесь.

ElasticSearch предназначен для поиска, и ваше отображение должно быть оптимизировано для поиска.Если ваша форма отображения определяется способом отображения информации, значит, что-то не так.

Создайте свой индекс для поиска

Обратите внимание, что под "поиском" яозначают как индексирование, так и запросы.

Для имеющегося варианта использования кажется, что вы могли бы:

  • Индексировать только комментарии со ссылкой (некоторый идентификатор) на родительский потокв индексированном документе comment.
  • После того, как вы вернете результаты поиска (список комментариев) из индекса поиска, вы можете извлечь каждый комментарий вместе с его родительским потоком из какого-либо другого источника данных (например,реляционная база данных).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...