elasticsearch 학습 노트(34) - Elasticsearch는 scoll 기술을 바탕으로 대량의 데이터를 스크롤하여 검색합니다.

3652 단어 elasticsearch
실제 응용에서from+size를 통해 깊은 페이지의 병목이 발생할 수 있으므로scoll기술을 통해 깊은 페이지를 해결하는 좋은 방법이다.예를 들어 만약에 우리가 한꺼번에 10만 개의 데이터를 찾아내려면from+size를 사용하면 성능이 매우 나쁘고priorityqueue는 매우 크다.이때 scroll 스크롤 조회를 사용하면 모든 데이터가 다 조회될 때까지 일괄적으로 조회할 수 있습니다.

scroll 원리


scoll 검색은 첫 번째 검색을 할 때 당시의 보기 스냅샷을 저장하고 그 다음에 이 오래된 보기 스냅샷을 바탕으로 데이터 검색을 제공합니다. 이 기간에 데이터가 변경되면 사용자가 볼 수 없습니다.그리고 ES 내부는 _ 기반doc가 정렬하는 방식은 성능이 비교적 높다.예:
POST /test_index/_search?scroll=1m
{
  "query": {
    "match_all": {}
  },
  "sort": [
    "_doc"
  ],
  "size": 3
}

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAABu4oWUC1iLVRFdnlRT3lsTXlFY01FaEFwUQ==",
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "field1" : "one"
        },
        "sort" : [
          0
        ]
      },
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "field1" : "two"
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "field1" : "three"
        },
        "sort" : [
          2
        ]
      }
    ]
  }
}
POST /_search/scroll
{
  "scroll": "1m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAABu4oWUC1iLVRFdnlRT3lsTXlFY01FaEFwUQ=="
}
{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAABu4oWUC1iLVRFdnlRT3lsTXlFY01FaEFwUQ==",
  "took" : 1,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "field1" : "four"
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "field1" : "five"
        },
        "sort" : [
          4
        ]
      },
      {
        "_index" : "test_index",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : null,
        "_source" : {
          "field1" : "six"
        },
        "sort" : [
          5
        ]
      }
    ]
  }
}

좋은 웹페이지 즐겨찾기