뱅크샐러드 공식 블로그 | 메인 · 2023. 06. 08.
점점 커지는 RDB Table, S3로 귀양 보내고 Athena로 불러오기 - feat. Optimization with Spark Bucketing
AI 엔지니어링 브리핑
커지는 MySQL 이력 데이터를 S3로 옮긴 뒤, 사용자별 조회에 필요한 파일만 읽도록 버킷팅과 파티션 구조를 개선한 사례입니다.
문제 & 배경
- 문제 & 배경: 마이데이터 이벤트 로그가 MySQL에 계속 쌓이면서 저장 비용이 커졌고, 이를 S3와 Athena로 옮긴 뒤에도 사용자 한 명의 데이터를 찾기 위해 많은 파일과 데이터를 읽어 Athena·S3 호출 비용이 크게 증가했습니다.
기술 & 해결책
- 기술 & 해결책: 데이터를 날짜별로 나누고 user id를 기준으로 버킷팅해 같은 사용자의 데이터가 정해진 파일에 들어가도록 했으며, Spark와 Athena의 호환 문제는 CTAS 방식으로 우회하고 Spark 작업 전에 데이터를 재분할해 파티션마다 파일 하나가 만들어지게 했습니다.
교훈 & 주의점
- 교훈 & 주의점: 이 방식으로 Athena 호출 비용을 약 700배 줄이고 MySQL 저장 비용도 크게 낮췄지만, Spark 버킷팅은 실행 Executor 수에 따라 파일이 불필요하게 늘어날 수 있고 Athena와의 호환성 및 버킷을 고려한 쿼리 작성까지 함께 검증해야 합니다.
함께 읽을 글
내용이 비슷해요내용이 비슷한 글을 먼저 보여드려요. 같은 문제나 해결책을 다룬다는 뜻은 아니에요.