Elasticsearch란
검색 및 분석을 위한 분산형 오픈소스 데이터베이스
데이터를 index라는 구조로 저장하고, 이를 통해 빠르고 유연한 검색이 가능
Document : Elasticsearch에서 데이터의 최소 단위(예 : JSON 형식의 데이터)
Index : Document들이 모여있는 데이터베이스와 유사한 개념
Cluster/Node : 여러 개의 Index와 데이터를 저장하는 서버환경
Elasticsearch 데이터 삭제 방법
1. 인덱스 전체 삭제
DELETE /index_name
2. 조건에 맞는 Document 만 삭제
POST /index_name/_delete_by_query
{
"query": {
"match": {
"field_name": "value" // field_name, value 특정 조건
}
}
}
3. Document ID 로 특정 데이터 삭제
DELETE /user_data/_doc/123
엘라스틱서치 데이터 삭제시 주의해야할 사항으로는
데이터 복구가 불가능하기 때문에 삭제한 중요한 데이터는 삭제 전 백업이 꼭 필요하다.
Elasticsearch 대량 삭제가 다른 작업에 미치는 영향
읽기
Elasticsearch는 분산형 아키텍처를 사용하기 때문에, 대량 삭제 작업이 진행되는 동안 검색 및 조회 가능하다
삭제 작업이 클러스터에 높은 부하를 줄 경우, 일부 검색 쿼리의 응답 속도가 느려질 수 있다
쓰기
삭제 작업은 노드 리소스를 소비하므로, 동시에 대량 데이터를 추가하거나 갱신하려는 작업이 진행중이면 성능 저하가 발생할 수 있다
_delete_by_query 사용시 데이터를 검색하고 삭제하므로 CPU와 디스크 I/O를 많이 사용
작업의 양이 많아질 경우 성능 서하가 발생할 수 있다
성능 저하를 최소화하는 방법
. 사용자 활동이 적은시간(업무 외 시간, 야간)에 삭제 작업을 진행
. 삭제 작업을 분할 처리
: 삭제 작업을 한번에 하지 않고 적게 나눠서 삭제한다.
. Throttling 설정
: request_per_second 값을 설정하여 삭제 제한 설정
ex) 초당 100건 삭제 제한
POST /index_name/_delete_by_query?requests_per_second=100
{
"query": {
"match_all": {}
}
}
. Cluster 상태 모니터링
Kibana의 Monitoring 이나
/_cat/health
명령어를 사용해 클러스터 상태 모니터링
* 상태가 green 일 경우 클러스터가 안정적 상태라는 뜻
회사 업무 작업 전 정리 중.
연습삼에 로컬 컴퓨터에 환경을 구축해서 실험해볼 예정이다.