Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] 게시글 검색 Elasticsearch 적용 #266

Merged
merged 13 commits into from Nov 4, 2023
Merged

[BE] 게시글 검색 Elasticsearch 적용 #266

merged 13 commits into from Nov 4, 2023

Conversation

Jinwook94
Copy link
Owner

@Jinwook94 Jinwook94 commented Nov 4, 2023

배경

  • 검색어가 포함된 요청의 경우 FULLTEXT Index 적용하여 어느 정도 개선했지만 여전히 한계 있음
    • FULLTEXT Index 사용시 응답 데이터 많을 수록 응답 속도 크게 느려짐
    • RDB Count 연산 느림
  • Elasticsearch 사용하여 위 문제 개선 가능하여 적용
추가 설명

작업 내용

  • 인스턴스 프로비저닝: 최소 1G 메모리 필요해서 t4g.micro
  • docker-compose 사용하여 Elasticsearch 실행
  • 데이터 복제: MariaDB → Elasticsearch
    • 일회성으로 기존의 MariaDB post 테이블 데이터를 Elasticsearch post 인덱스로 복제
    • logstash 활용 방법 등 다양한 방법 있지만, 기존에 Python 스크립트 사용하여 비슷한 작업 진행했기 때문에 이번에도 Python 스크립트 사용
    • Jinwook94/mock-data-generator@f455c6b
  • 어플리케이션 코드 수정

개선 결과

검색 쿼리 응답 데이터 수 응답 시간 (LIKE 연산자 사용) 응답 시간 (FULLTEXT 인덱스 사용) 응답 시간 (Elasticsearch 사용)
"게시글" 100만개 1,207 ms 10,916 ms 213 ms
"important" 21,940 2,699 ms 418 ms 74 ms
"important school" 476   976 ms 133 ms
"테스트" 4 10,304 ms 35 ms 125 ms
"abcde" 0 10,054 ms 26 ms 90 ms
  • RBD 사용하며 LIKE 연산자 혹은 FULLTEXT 인덱스를 사용하여 검색 쿼리를 처리하면 검색어에 따라 응답시간이 크게 늘어날 수 있다는 단점 있었음
  • 그러나 Elasticsearch 사용시 검색어에 따라 응답 시간 편차가 크지 않아 사용자에게 일관된 검색 성능 제공할 수 있음
  • 또한 다양한 언어의 텍스트 분석 기능을 내장하고 있어 복잡한 검색 요구사항에도 유연하게 대응 가능함

추가 To do

  • SSL 설정 추가
  • 동기화 보장 위해 EDA + 배치 적용

참고

@Jinwook94 Jinwook94 added the feat New feature or request label Nov 4, 2023
@Jinwook94 Jinwook94 self-assigned this Nov 4, 2023
@Jinwook94 Jinwook94 linked an issue Nov 4, 2023 that may be closed by this pull request
Copy link

github-actions bot commented Nov 4, 2023

Test Results

21 files  21 suites   10s ⏱️
84 tests 84 ✔️ 0 💤 0
85 runs  85 ✔️ 0 💤 0

Results for commit bf9c5c7.

@Jinwook94 Jinwook94 merged commit 5f73b74 into main Nov 4, 2023
3 checks passed
@Jinwook94 Jinwook94 deleted the issue265 branch November 4, 2023 08:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] 게시글 검색 Elasticsearch 적용
1 participant