select column1, column2 from table;
약 500만개 데이터가 저장된 DB에서 위 쿼리로 조회하고 나온 컬럼 값을 기반으로 통계를 작성해야 하는데,
무슨짓을 해도 전체 데이터를 반환 받는데 30초 이상 걸리는데, 도저히 어떻게해야 1초 이내로 반환받는지 모르겠네요.
전체 데이터를 캐쉬화 시켜서 서버나 redis 같은 저장소에 넣어둘까 싶기도 했지만
select column1, colum2 from table where date between 19000101 and 20240101;
과 같이 range 검색또한 빈번히 일어나서, 전체데이터만 캐싱하는게 의미가 없어보이네요.
DB단에서 결과를 반환 받는게 아니라 서버단에서 뭔가 처리를 하는건지.. 혹시 비슷한 문제를 해결하신분 계실까요?
디퍼드 처리를 해주세요.
1. 통계 결과 조회를 위한 별도의 테이블을 생성합니다.
2. 일정 시간마다 수행되는 서버 배치를 추가합니다. (통계 SELECT 후 별토 테이블에 INSERT)
3. 실시간 조회 서비스는 해당 생성된 테이블을 조회
그런데 문제는 range 검색 할때인데, range 검색 결과의 모든 케이스들이 데이터베이스에 insert 되어야 할것같은데, 이게 현실적으로 가능할까 싶네요.
입력되는 케이스가 매번 달라져서, 모든 경우에 해당하는 결과를 모두 저장해놓아야 한다는 것인지요?
입력되는 케이스가 달라도 이걸 해결할 수 있는지 상세히 알려주셨으면 합니다.
500만개의 데이터를 여러 조건에 따라서 실시간 통계를 생성해야 한다면 차라리 다차원 데이터베이스를 사용해야 합니다.
RDB로는 요구사항을 수용하기 힘듭니다.
의견 감사드립니다. 마지막으로 다차원 데이터베이스에는 어떤 솔루션이 있을까요? 현재 제가 사용하는 DB는 mongoDB인데, 이걸로도 다차원 데이터 모델링이 가능할지 궁금하네요.