선요약: 대용량 csv파일 디비에 어떻게 저장하는 방법 돈과 성능을 고려했을때 뭐가 최적일까요?
학식따리인데 방학 프로젝트로
환경예측 데이터를 제공하는 스프링부트 api서버를 구축중입니다. 예측값에 조건을 넣어서 (날짜, 위도,경도등 25개정도의 요소) 검색하면 그때에 환경이 어떻게 되어있을지 예측한 데이터를 리턴해주는 서버입니다.
추후 인공지능 서버의 정확도 관리를 위해 예측을 어떻게 했는지도 데이터베이스에 저장해둬야합니다.
인공지능 서버로부터 환경 예측 데이터를 300메가바이트(팔백만줄 정도 입니다)정도 크기의 Csv파일이 하루에 30개정도 요청이 들어옵니다 (오전 10시쯤 10개가 한번에, 오후 10시에 또한번, 새벽에 또한번 세번에 나눠서 요청이 옵니다.)
이 csv파일을 데이터베이스에 저장해야해서
1. Csv파일을 객체로 변환시켜 jpa로 mysql 데이터베이스에 저장하니 속도가 너무 느려서 포기
2. 그나마 속도가 더 빠른 Load data infile을 이용했더니 배포 서버에서는 1.7메가 5000줄 저장하는데 약 17분정도 소요되서 포기. (로컬에서 스프링 mvc 서버를 돌리고 디비는 Gcp mysql 한달200달러짜리 mysql 인스턴스사용했습니다)
이렇게 많은 데이터를 저장해야하는게 처음이라 감이 잘 안잡힙니다. 일단 여러가지 기술 쓰지 말고 최소한의 기술로만 구현해보자는 의도에서 mysql + mvc로 구현했더니 이런 속도가 나네요. 웹플럭스 등을 사용해야할지도 모르겠습니다.
-이정도 데이터는 보통 프로덕션에서 돌린다고 하면 어느정도 성능을 내야하는지 궁금합니다.
-이경우 데이터 흐름을 어떻게 해야할지 조언 부탁드립니다.
제가생각하는 해결방법은
-csv파일을 스파크에 변환해서 넣고 오래된것은 스파크에서 삭제하고mysql에 삽입
-인공지능 서버에서 데이터를 csv로 변환하지 말고 메세지브로커로 데이터가 발생할때마다 한줄한줄 pub sub을 이용하여 스파크 데이터베이스,mysql에 넣는다
두가지밖에 생각이 안납니다
문제는 제가 좆그지라 스프링부트 서버에는 달에 30~40만원정도밖에 돈을 못씁니다.... 인메모리디비는 많이 비싸더군요..
고견 부탁드립니다.
댓글 0