elasticsearch 학습노트(14)-Elasticsearch partial update 실현 원리와 실천

2189 단어 elasticsearch
우선 왜 partial update가 있는지 말씀드리겠습니다.이전에 문서 작성 및 교체 문서 업데이트에 대한 형식은 다음과 같습니다.
PUT /{index}/{type}/{id}
{}

일반적으로 응용 프로그램에 대응하는데 매번 실행 절차는 기본적으로 다음과 같다. (1) 응용 프로그램이 먼저 get 요청을 시작하여document를 얻고 프론트 인터페이스에 보여줌으로써 사용자가 프론트 인터페이스에서 데이터를 수정하고 프론트 데스크톱에 보내면 (3) 프론트 코드는 사용자가 수정한 데이터를 메모리에서 실행한다.그리고 수정된 전량 데이터를 봉인하고 (4) PUT 요청을 ES에 보내면 전량 교체 (5) ES는 오래된 문서를deleted로 표시하고 새 문서를 만듭니다.
이전 절차의 한 가지 문제는 데이터를 수정할 때마다 교체하기 때문에 매번 가지고 있는 필드는 수정할 필드를 포함할 뿐만 아니라 다른 모든 필드를 가지고 가야 한다는 것이다.이 점을 겨냥하여 ES에 partial update가 생겼다.형식은 다음과 같습니다.
POST /{index}/{type}/{id}/_update
{
    "doc": {
        " "
    }
}

이렇게 하면 보기에 매우 편리한 것 같다. 매번 수정할 때마다 수정된 필드 몇 개만 전송하면 되고, 전량의document 데이터를 보낼 필요가 없다.

partial update 실현 원리 및 장점


partial update 실현 원리: 본질적으로 말하자면 그의 실현 원리는 전통적인 전량 교체 방식과 거의 같다.과정은 다음과 같다. (1) 내부에서document를 먼저 얻는다. (2) 전달된field를document의 json에 업데이트한다. (3) 낡은 document를deleted로 표시한다. (4) 수정된 새로운 document를 만든다. 본질이 똑같다고 하면 전통적인 방식에 비해 좋은 점은 어디에 있는가?비교한 후에 다음과 같은 장점을 발견하기 어렵지 않다. (1) 모든 조회, 수정, 쓰기 작업은 ES의 하나의shard 내부에서 발생한다. 전통적인 전량 교체가 메모리에 조작을 넣는 방식에 비해 모든 네트워크 데이터 전송의 비용을 피하고 성능을 크게 향상시켰다. (2) 조회와 수정의 시간 간격을 줄이고 충돌하는 상황을 효과적으로 줄일 수 있다.
PUT /test_index/_doc/3
{
  "test_field1": "test1",
  "test_field2": "test2"
}
GET /test_index/_doc/3
{
  "_index" : "test_index",
  "_type" : "_doc",
  "_id" : "3",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "test_field1" : "test1",
    "test_field2" : "test2"
  }
}
POST /test_index/_update/3
{
  "doc": {
    "test_field2" : "update test2"
  }
}
GET /test_index/_doc/3
{
  "_index" : "test_index",
  "_type" : "_doc",
  "_id" : "3",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "test_field1" : "test1",
    "test_field2" : "update test2"
  }
}

좋은 웹페이지 즐겨찾기