ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MongoDB Atlas Search
    Database 2024. 5. 1. 22:06

    MongoDB

     
     
    프로젝트에서 검색 방법을 바꿔야 할 필요가 있어요.
    관심이 생겨 찾아보는데 정리해 두면 좋을 것 같아서 생각의 흐름을 적어봐요.
    근본적인 시스템을 바꾸지 않고는 지금 구조에서는 지금 생각이 베스트 같은데 혹시 더 좋은 방법이 있으면 알려주세요...
     

    요구사항

    • 검색어로 RDB 에 저장된 부동산 이름 및 주소를 검색
    • 부동산 타입별 검색
    • 특정 부동산 타입에 대해서는 내부적으로 정의한 count 가 많은 순으로 정렬
    • 검색하는 갯수 지정

    추가적으로 데이터 업데이트는 거의 일어나지 않음
     

    문제

    • 현재는 검색을 위한 tsv 파일을 만들고, 서버 실행 시 메모리에 올려두고 사용함.
    • 데이터가 추가되면서 tsv 파일의 사이즈가 너무 커짐. 대략 10GB
    • 이 방법으로 사용하려면 현재 사용 중인 AWS ECS 대신 EC2 로 변경하거나, ECS 인스턴스 사양을 올려야 함.
    • ECS 인스턴스 사양을 올린다고 해도 컨테이너 실행 과정에서 tsv 파일을 가져오는라 처음 컨테이너 시작하는데 시간이 늘어남.

     

    기존의 RDB 사용하기

    • 그냥 지금 사용 중인 RDB 에서 Full-Text Search, LIKE 쿼리를 잘 쓰면 안 될까?

    문제점

    • 검색어로 2글자가 쓰인 경우가 많을 텐데, Full-Text Search 사용 시 2글자 검색을 할 수 없음.
      • 현재 사용 중인 AWS RDS for Aurora 에서는 innodb_ft_min_token_size 설정을 바꿀 수 없다.
    • LIKE 쿼리를 쓴다면 (*검색어*) 와 같이 검색어 양쪽에 와일드카드가 쓰여야 할 텐데 그러면 B-Tree Index를 제대로 사용하지 못한다.
    • 결론은 쿼리가 너무 느리고 RDB 로 쓰기 어려울 것 같다.

     

    다른 방법

    • AWS CloudSearch
      • search.m4.large / 0.255$
      • 최소 사양이 너무 비쌈.
      • 처음에 document insert 가 편리한 거 말고 큰 장점을 모르겠음.
    • AWS OpenSearch
      • 1개 노드기준 / t3.small.search / 0.056$
      • CloudSearch 보다 저렴
    • MongoDB Atlas Search
      • 3개 노드 기준 / M10 Tier / 0.08$
      • Storage 10GB
      • 나중에 Vector DB 도입하는 것도 고려함.
    • AWS 를 쓰고 있어서 OpenSearch 쓰는 것도 고민되는데 지금 생각은 MongoDB Atlas Search 사용하는 게 베스트 같음.

     

    MongoDB Atlas Search 확인

    • MongoDB Atlas 에서 무료플랜으로 써볼 수 있어서 console 에서 작은 사이즈로 데이터 넣고 Search Index 생성해서 테스트해 봤는데 기대한 대로 작동한다.
    • console 이 친절하게 잘 되어 있어서 MongoDB 를 처음 사용해도 쓰기 어렵지 않았다.

     

    결론

    • RDB 를 메인으로 쓰고 있는데 작은 규모의 검색이 필요하며, 나중에 NoSQL 데이터 저장을 고려한다면 MongoDB Atlas 사용이 좋은 것 같아요.
    • 상세한 구현 과정은 아직 결제를 못해서... 지금 생각한 구조로 진행하게 되면 다음 기회에 적어볼게요.

     
     

    찾으면서 보니까 MongoDB 좋은 것 같아서 나중에 개인 프로젝트 할 일 있으면 메인으로 써보고 싶어요.
     

     

    'Database' 카테고리의 다른 글

    공동주택 공시가격 DB 저장하기  (2) 2024.02.15
    mysql whitespace to null  (0) 2024.02.14
    MySQL wait_timeout  (0) 2023.10.27
    PostgreSQL collate 한글 컬럼 정렬  (2) 2023.04.04
    PostgreSQL Index  (2) 2023.02.26
킹수빈닷컴