ElasticSearch를 도입하기전, ElasticSearch에대해 공부하기 위해 레퍼런스를 읽으면서 번역&정리한 글입니다.
문서 전체를 번역한 것이 아니라 개인적으로 정리가 필요하다 싶은 내용만 정리하였습니다.
ElasticSearch(이하 ES)는 데이터를 분산 저장한다. 그리고 테이블에 행과 열의 방식으로 데이터를 저장하는 것이 아니라 JSON으로 직렬화하여 저장한다. 만약 클러스터가 여러개의 ES 노드로 구성되어 있다면 저장된 document들은 클러스터에 분산 저장되어 어떤 노드에서든 접근이 가능하다.
Document가 저장되면 index가 되어 1초안에 거의 실시간으로 검색이 가능하다. ES는 Inverted Index라는 자료구조를 사용하여 매우 빠른 Full-Text-Search(이하 FTS)가 가능하다. Inverted Index는 document안에 존재하는 모든 유니크한 단어들을 정리하여 그 단어가 포함된 document들을 찾아낸다.
Index는 최적화된 document들의 모음이라고 할수있다. 그리고 각각의 document들은 key-value로 구성된 데이터들을 저장하는 field들로 구성된다. ES는 기본적으로 모든 field들을 인덱싱(앞의 index와는 조금 다름)하며 각각의 인덱싱된 field들은 최적화된 자료구조를 가지고 있다. 텍스트로 구성될 field들은 inverted indices 자료구조로 저장되고, 숫자와 위치정보 field들은 BKD 트리 구조로 저장된다. 이렇게 각각의 필드에 맞춤 자료구조를 사용하는 것이 ES가 매우 빠른 이유이다.
가끔은 하나의 field를 여러가지 방법으로 인덱싱하는 것이 유용할때가 있다. 예를 들면 문자열 field를 Full-Text-Search를 위하여 text field로 인덱싱하고, 데이터 정렬과 수집을 위해서 keyword field로도 인덱싱할 수 있다. 아니면 하나 이상의 language analyzer를 사용하여 인덱싱할 수도 있다.
'백엔드' 카테고리의 다른 글
[Nodejs 내부 원리] Chapter1 정리 - Reactor Pattern (0) | 2019.12.06 |
---|---|
[ElasticSearch 공부하기] Mapping (0) | 2019.11.14 |
[ElasticSearch 공부하기] Mapping Types (0) | 2019.11.14 |
[ElasticSearch 공부하기] Scalability and resilience: clusters, nodes, and shards (0) | 2019.11.14 |
[ElasticSearch 공부하기] Information out: search and analyze (0) | 2019.11.14 |