[ElasticSearch] 개념 정리

몇가지 용어만 알면 될것 같은데.. 하두 흔히 사용하는 용어를 사용해서 햇갈린다.

http://www.elasticsearch.org/guide/reference/glossary/#id

일단, 데이터베이스에 해당하는 용어가 index. 인덱스는 최소 한개 또는 그 이상의 primary shard에 대응하는 논리적인 이름이다.

테이블에 해당하는게 type.

type에 들어가는 한 데이터(row)는 document. document는 index에 저장되고 type과 id가 있다. 한 document에는 여러 field나 키-값 쌍이 들어있다.

type을 정의하는 스키마에 해당하는게 mapping.

테이블의 컬럼에 해당하는게 filed.

원본 JSON 담고 있는 필드가 source filed로 _source라는 필드가 있다.

document 식별자가 id.

============

text를 analysis해서 term으로 인덱스 시킨다.

text는 글 덩어리?

analysis는 전체 글을 term으로 바꾸는 과정이고 엘라스틱서치는 term을 index시킨다. 풀 텍스트 검색도 결국은 검색어를 term으로 바꿔서 term 검색에 대응되는 녀석 찾아주는 식으로 처리된다.

============

cluster는 동일한 클러스터 이름을 가진 여러 node로 구성된다. 클러스터에는 클러스터가 자동으로 지정한 마스터 노드가 한개 있으며, 마스터 노드가 죽으면 다른걸로 바뀔 수 있다.

node는 클러스터에 속한 실행중인 엘라스틱서치 인스턴스다. 보통 서버당 하나만 사용하지만 테스트용으로 여러개 써보는거야 뭐.. 노드를 실행할 때 클러스터 이름으로 기존 클러스터를 찾아서 그안에 들어갈 수 있는데 이때 unicast나 multicast를 사용할 수 있다.

document를 저장하는 곳이 primary shard인데, primary shard에 먼저 document를 인덱스 시킨다음에 해당 primary shard의 모든 replica shard로 복사한다. 기본값으로 한 index마다 5개의 primary shard를 가지는데, 설정으로 변경 가능. 인덱스를 일단 만들고나면 primary shard 개수를 변경할 수 없다.

routing은 index에 저장할 document를 실제 어떤 primary shard에 저장할지 정하는 과정인데 document의 id값을 해싱한 routing 값을 사용하거나, document가 parent document를 가지고 있다면 해당 parent의 id값을 사용해서 부모랑 자식이 같은 샤드에 들어가게 한다. routing 값 오버라이딩 하거나 mapping할 때 설정하는 방법은 나중에.

replica shard는 두가지 목적으로 사용하는데, 하나는 페일오버로 primary shard가 죽을 때 replica shard를 primary shard로 승격시켜서 사용하기 위함이고 두번째는 성능으로 get이나 search를 primary shard와 replica shard로 처리해서 성능 향상. 기본값으로 primary shard당 한개의 replica shard를 가지고 기존 index에 동적으로 replica shard를 추가할 수 있다. primary shard와 같은 노드에서 시작하지 않는게 좋다.

shard 한개는 루씬 인스턴스 한개다. 엘라스틱서치가 관리하는 저수준의 “worker”이고, 여러 primary 샤드와 replaca 샤드 묶음을 논리적인 이름으로 나타내는게 index다. 샤드 개수 설정할 때 빼고 코딩할 때는 샤드를 직접 지칭할 일은 없고 index를 사용할 것이다. 엘라스틱서치가 클러스터의 여러 노드로 샤드를 분산시킨다. 샤드는 노드가 죽거나 새 노드가 추가될 때 동적으로 다른 노드로 옮겨질 수 있다.

=============

아 놔 이제야 좀 정리가 되네..

그러니까.. 노드는 엘라스틱서치 인스턴스고, 그 안에 인덱스 만들면 샤드라는 루씬 인스턴스가 생기는데 기본값으로 인덱스마다 primary 샤드 5개랑 각 primary 샤드당 replica 샤드가 1개씩 생기니까 기본으로 인덱스 하나 마다 10개의 루씬 인스턴스가 뜨는거네..

흠.. primary 샤드 개수는 어느 정도가 적당한거지?

 

 

4 thoughts on “[ElasticSearch] 개념 정리”

  1. 안녕하세요, elasticSerach 관련하여 개발 도중에 블로그를 찾게 되었습니다.

    몇개의 primary shard가 괜찮은지 혹시 찾으셨나요?…

    저도 그냥 쓰고있긴한데 전부 디폴트 설정으로 쓰고만 있어서 여쭤보고싶습니다 ㅠㅠ

  2. 안녕하세요. 얼마 전 스타트업을 시작한 김종민이라고 합니다. 저희 솔루션에 적용하기 위한 기술들을 찾다가 엘라스틱서치를 접하게 되었는데, 사용하다 보니 상당히 괜찮은 녀석인 것 같습니다. 그런데 대한민국에서는 엘라스틱서치에 대해 정보가 별로 없고 하시는 분들이 많지 않은 것 같아서 한번 엘라스틱서치 유저 그룹을 만들어 스터디를 하며 전파해보고 싶은 계획이 있습니다. 제가 연락을 드릴 방법이 없어 여기 답글을 남겨놓습니다. 혹시 함께 하실 의향이 있으시면 남겨놓은 제 이메일로 연락 주시면 감사드리겠습니다.

    1. 네 안녕하세요. 메일주소 남겨주신 댓글은 삭제했고 답메일 보내드렸습니다. 감사합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *