현재 채팅 서버 관련해서 채팅 기록들을 elastic search에 저장하는 것을 구현해야 한다.
하지만 단체 쪽지는 elastic search에 저장하지 않기로 결정하였는데, 이런 결정에 이르기 까지 자료 조사를 했던 것을 정리해보려고 한다.
1. Elastic Search 작동 방식
Elastic Search는 오픈 소스 분산 검색 엔진으로, 대규모 데이터에서 빠르게 검색하고 분석할 수 있도록 설계되었습니다. ES는 다음과 같은 방식으로 작동합니다:
데이터 저장 및 인덱싱
- Document: ES에서 데이터의 기본 단위는 Document입니다. 각 Document는 JSON 형식으로 저장됩니다.
- Index: Document들은 Index에 저장되며, Index는 데이터의 논리적인 집합을 나타냅니다.
- Shard: Index는 여러 Shard로 분할되어 저장되며, 각 Shard는 단일 노드에서 저장되고 검색됩니다.
- Replica: Shard는 데이터 복제본(Replica)을 가질 수 있어, 데이터 손실을 방지하고 검색 성능을 향상시킵니다.
검색 및 질의
- Query: 사용자는 다양한 Query를 통해 데이터를 검색할 수 있으며, ES는 인덱싱된 데이터를 기반으로 빠르게 결과를 반환합니다.
- Aggregation: ES는 데이터를 집계하고 분석할 수 있는 강력한 기능을 제공하여, 대규모 데이터 분석에 유용합니다.
2. 단체 쪽지 저장의 문제점
단체 쪽지를 ES에 저장하지 않은 이유는 주로 성능 이슈 때문입니다.
성능 이슈
- 데이터 양 증가: 단체 쪽지는 일반적으로 수신자가 많아, 개인 쪽지에 비해 데이터 양이 기하급수적으로 증가합니다. 이는 ES 인덱스 크기 증가로 이어져, 검색 성능 저하를 초래할 수 있습니다.
- 메모리 사용량 증가: 많은 데이터를 처리하기 위해 메모리 사용량이 증가하여 전체 시스템의 성능 저하가 발생할 수 있습니다. 특히, ES는 데이터를 메모리에 로드하여 검색 성능을 최적화하므로, 데이터 양이 많아지면 메모리 압박이 가중됩니다.
- 캐시 히트 비율: 단체 쪽지가 빈번하게 검색되어 캐시 히트 비율이 높아지면, 개인 쪽지의 캐시 히트 비율이 낮아져 검색 성능이 저하될 가능성이 있습니다. 이는 전체 시스템의 검색 효율성에 부정적인 영향을 미칠 수 있습니다.
캐시 히트
- 캐시 메모리: 고속 데이터 액세스를 위해 자주 사용되는 데이터를 저장하는 소형, 고속 메모리.
- 캐시 히트: 시스템이나 애플리케이션이 요청한 데이터가 캐시 메모리에 존재하여, 빠르게 데이터를 반환할 수 있는 경우.
- 캐시 미스: 요청한 데이터가 캐시 메모리에 없어서, 주 메모리나 저장 장치에서 데이터를 가져와야 하는 경우.
캐시 히트의 중요성
- 성능 향상: 캐시에서 데이터를 검색하면 데이터 액세스 속도가 빨라짐.
- 지연 시간 감소: 빠른 데이터 액세스로 애플리케이션의 지연 시간이 감소.
- 자원 효율성: 캐시를 사용하면 자주 액세스되는 데이터를 빠르게 처리하여 시스템 자원을 효율적으로 사용.
ES에서의 캐시 히트
- 쿼리 캐시: 자주 실행되는 쿼리 결과를 캐시에 저장하여 빠르게 결과 반환.
- 필드 데이터 캐시: 정렬 및 집계를 위한 필드 데이터를 캐시에 저장하여 성능 향상