개발 Q&A

제목 기간별 조회수를 구현하기 위한 SQL 구축 방법을 문의드립니다.
카테고리 DB
글쓴이 골드잉여 작성시각 2017/05/19 18:11:17
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 782   RSS

조회수를 단순하게 구현하면, 게시글을 클릭하면 hits = hits + 1로 구현하면 됩니다.

 

그런데 기간별 조회수 통계를 구하려고 table을 새로 만들고 아래와 같이 field를 정했습니다.

id(int), 원글id(int), type(enum:글을 본건지,첨부파일을 받은건지 등등 구분), created(unsigned int)

이렇게 table을 만드니, 기간별로 type을 정해서 원하는 데이터를 쉽게 구할 수 있었습니다.

문제는 테이블의 용량이 아직은 괜찮은 수준이나, 사용자가 많아질 수록 점점 빠르게 증가하고 있는 상황입니다.

예상하기로는 속도저하도 발생할 것 같습니다.

 

제가 생각한 해결책은 int로 timestamp값을 가지고 있는 것이 가장 좋지만, 기간별 통계를 위해 월별로 조회수를 취합하는 것으로 바꾸는 것입니다.

기존 table에 year/month/hits  field를 추가하여 column이 없으면 hits를 1로 하여 생성하고, 있으면 hits에 1을 더하는 것입니다.

 

1. 위와 같이 하면 세분화된 timestamp는 구하지 못하지만 table 용량은 줄어서 큰 문제는 없을 것 같습니다.

  제가 위와 같이 생각한 방법이 최선 일까요? 혹시 다른 방법이 있을까요?

2. 위와 같이 table을 변경하면 기존의 hits 수를 어떤식으로 변환에서 새로운 table에 넣어야 할지도 고민입니다.

  추천해주실 수 있는 방법이 있을까요?

  

 다음글 금요일 세션관련 질문 했던 사람입니다.. (1)
 이전글 세션 관련 질문.. (8)

댓글

개락 / 2017/05/19 19:50:26 / 추천 0

게시글별로 일단위 조회수 시간까지 체크해야하는게 아니라면 위에 적으신 방법말고는 저도 떠오르는건 없네요..

새로운 테이블에 date / 게시글id / hit 로 조회마다 hit올려서 일별로 체크하시는게 날거같고

기존 테이블에 날짜관련 컬럼을 게시글id별로 일단위 그룹으로 묶으면 바로 데이터 나오지 않나요?? 그럼 신규테이블로 바로 넣어버리면 될꺼구요..

실제 데이터를 보지 않고 말씀드리는거라.. 좀 애매한 부분이 있긴한데 말씀하신대로 처리하시는게 저같은 쪼랩이 보기엔 적당해보입니다. ^^;

변종원(웅파) / 2017/05/19 23:26:57 / 추천 0
파티셔닝 찾아보세요. 월별로 파티셔닝 하면 될것 같네요.
골드잉여 / 2017/05/23 09:58:14 / 추천 0

@개락 답변 감사합니다. 일단 저는 데이터 양을 더 줄이기 위해서 일별이 아닌 월별로 구성했고, date type에  YYYY-MM-00 이런식으로 일에는 무의미한 값을 넣어서 변경을 진행했습니다. 기존 자료 변환도 SQL에서 가공하는 방법이 있을까 해서 여쭈어 봤던 것인데, 그냥 코드 하나 만들어서 그룹핑해서 인서트했습니다.

@웅파 파티셔닝이라는 방법이 있는지 처음 알았습니다. 조금 더 공부하도록 하겠습니다. 감사합니다.