제목 | 기간별 조회수를 구현하기 위한 SQL 구축 방법을 문의드립니다. | ||
---|---|---|---|
카테고리 | DB | ||
글쓴이 | 골드잉여 | 작성시각 | 2017/05/19 17:41:17 |
|
|||
조회수를 단순하게 구현하면, 게시글을 클릭하면 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:20:26 /
추천
0
|
변종원(웅파)
/
2017/05/19 22:56:57 /
추천
0
파티셔닝 찾아보세요. 월별로 파티셔닝 하면 될것 같네요.
|
골드잉여
/
2017/05/23 09:28:14 /
추천
0
@개락 답변 감사합니다. 일단 저는 데이터 양을 더 줄이기 위해서 일별이 아닌 월별로 구성했고, date type에 YYYY-MM-00 이런식으로 일에는 무의미한 값을 넣어서 변경을 진행했습니다. 기존 자료 변환도 SQL에서 가공하는 방법이 있을까 해서 여쭈어 봤던 것인데, 그냥 코드 하나 만들어서 그룹핑해서 인서트했습니다. @웅파 파티셔닝이라는 방법이 있는지 처음 알았습니다. 조금 더 공부하도록 하겠습니다. 감사합니다. |
게시글별로 일단위 조회수 시간까지 체크해야하는게 아니라면 위에 적으신 방법말고는 저도 떠오르는건 없네요..
새로운 테이블에 date / 게시글id / hit 로 조회마다 hit올려서 일별로 체크하시는게 날거같고
기존 테이블에 날짜관련 컬럼을 게시글id별로 일단위 그룹으로 묶으면 바로 데이터 나오지 않나요?? 그럼 신규테이블로 바로 넣어버리면 될꺼구요..
실제 데이터를 보지 않고 말씀드리는거라.. 좀 애매한 부분이 있긴한데 말씀하신대로 처리하시는게 저같은 쪼랩이 보기엔 적당해보입니다. ^^;