1. Elasticsearch ?
엘라스틱서치는 apache lucene 아파치 루씬 기반의 Java 오픈소스 분산 검색 엔진 입니다.
엘라스틱서치를 통해 루씬 라이브러리를 단독으로 사용할 수 있게 되었으며, 방대한 양의 데이터를 신속하게 거의 실시간(NRT:Near Real Time)으로 저장, 검색, 분석할 수 있습니다.
엘라스틱서치는 검색을 위해 단독으로 사용되기도 하며, ELK(Elasticsearch / Logstash / Kibana) 스택으로 사용되기도 합니다. ELK스택이란 다음과 같습니다.
- Logstash : 다양한 소스(DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달
- Elasticsearch : Logstash 로부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 있는 정보를 획득
- Kibana : Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링
2. Elasticsearch 와 관계형 DB비교
관계형DB | ElasticSearch |
database | index |
table | type |
row | document |
column | field |
index | analyze |
primary key | _id |
schema | mapping |
physical partition | shard |
logical partition | route |
reational | parent/child, nested |
sql | query dsl |
3. Elasticsearch 아키텍쳐 / 용어정리
1) 클러스터
클러스터란 Elasticsearch 에서 가장 큰 시스템 단위를 의미하며, 최소 하나 이상의 노드로 이루어진 노드들의 집합.
서로다른 클러스터는 데이터 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며,
여러대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러개의 클러스터가 존재할 수도 있습니다.
2) 노드
Elasticsearch를 구성하는 하나의 단위 프로세스를 의미.
그 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분할 수 있습니다.
- Master-eligible node : 클러스터를 제어하는 마스터로 선택할 수 있는 노드. 마스터 노드가 하는 역할은 (1. 인덱스 생성, 삭제 2. 클러스터 노드들의 추적, 관리 3. 데이터 입력 시 어느 샤드에 할당할 것인지
- Data node : 데이터와 관련된 CRUD 작업과 관련된 노드. CPU,메모리 등 자원을 많이 소모하므로 모니터링 필요. 마스터와 분리하는것이 좋다
- Ingest node : 데이터를 변환하는 등 사전 처리 파이프라인을 실행.
- Coordination only node : data node 와 master-eligible node 의 일을 대신하는 노드. 대규묘 클러스터 큰 이점.
3) 인덱스(index) / 샤드(shard) / 복제(replica)
샤딩(sharding)은 데이터를 분산해서 저장하는 방법
즉, Elasticsearch 에서 스케일 아웃을 위해 index를 여러 shard로 쪼갠 것.
기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터 샤드갯수를 조정하는 튜닝을 하기도 함.
replica는 또 다른 형태의 shard라고 할 수 있다.
노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것.
따라서 replica는 서로 다른 노드에 존재할 것을 권장
4. Elasticsearch 특징
1. Scale out : 샤드를 통해 규모가 수평적으로 늘어날 수 있음
2. 고가용성 : replica를 통해 데이터의 안정성을 보장
3. Schema Free : Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념 없음
4. Restful : 데이터 CURD 작업은 HTTP Restful API를 통해 수행하며, 각각 다음과 같이 대응
data CURD | Elasticsearch Restful |
SELECT | GET |
INSERT | PUT |
UPDATE | POST |
DELETE | DELETE |
대부분의 출처:victorydntmd.tistory.com/308?category=742451
'PYTHON' 카테고리의 다른 글
[Python] altair 를 사용한 시각화 (0) | 2022.01.04 |
---|---|
[PYTHON] requests를 사용한 api POST방식으로 데이터 받아오기 (0) | 2020.09.25 |
[Python / 파이썬] format(), f", f-string, 포맷 문자열 리터럴, 포맷함수 (0) | 2019.07.25 |
[Python / 파이썬 ] 파라미터 앞 (*args, **kwargs) (0) | 2019.07.23 |
[Python / 파이썬] 딕셔너리 value 값 추가 / 하나의 키에 여러개의 값 넣기 (0) | 2019.07.22 |