Elasticsearch는 Lucene을 바탕으로 한 분산 검색엔진이다. 아직 검색엔진으로서 다양하게 사용을 해보진 않았고, 로그 데이터의 aggregation 용으로만 사용해보았지만 기초적인 특성에 대하여 정리를 해보겠습니다.
1. 관계형 데이터베이스와 다른 이름 형태
관계형 데이터베이스와 | elasticsearch |
Database | Index |
Row | Document |
Column | Field |
Schema | Mapping |
- Elasticsearch에서 인덱스는 관계형 DB의 Database 개념과 같다.
2. JSON 기반의 스키마리스 구조.
스키마가 없이 JSON으로 데이터를 바로 POST하여 넣을 수 있다. DB에서의 insert query가 그냥 API POST 로 바로 이뤄지는 것이다. (이부분이 처음에 접했을때 가장 신기했던 부분이다.)
- 다만 주의해야할 부분은 인덱스를 미리 생성하지 않고 json을 넣음으로서 인덱스를 생성하면 자동맵핑이 되는데 이때 elasticsearch는 하나의 텍스트 필드에 대해 keyword 필드와, text 필드 두가지를 다 만들게 된다. 이 둘의 차이는 text는 형태소 분석이 되어 단어가 포함된 검색이 가능하게 되는 것인데, 만약 용도가 단순 로그 aggregation인 경우, 혹은 이런 기능이 필요없는 필드의 경우 불필요하게 자리를 차지하게 되므로 미리 인덱스 템플릿을 정의하는것이 훨씬 효율적이다.
3. 확장성과 유연성
elasticsearch는 인덱스별로 샤드, replica 샤드가 생성이 되며 이로인한 유연성과 확장성이 생긴다. 데이터가 많더라도 샤드를 분리하여 저장하기 때문에 빠른 검색이 가능하고, 혹시 데이터가 하나의 샤드에서 장애가 발생한다 하더라도 replica에서 복구가 가능한 것이다.
이것은 사용해본 경험상 초기에는 샤드 크기를 적절하게 조정하는 것이 어려움이 있었다. 또한 노드 갯수와 샤드 갯수를 배수 단위로 설정하는 것이 하나의 노드에 부하가 쏠리거나 하는 위험부담도 생기지 않아 충분한 테스트를 마치고 클러스터를 구성하는 것이 좋을 것이라는 생각이 들었었다.
앞으로 하나하나 예제를 들어가며 정리를 해볼 예정이다.
'Elasticsearch > 개념' 카테고리의 다른 글
Elasticsearch -Forcemerge API (0) | 2021.04.22 |
---|---|
Elasticsearch - Rollover API (0) | 2021.04.20 |