2012-11-12 3 views
1

효율적인 자동화 된 작업을 설계하여 명성 포인트 테이블을 정리하는 데 어려움을 겪고 있습니다.행을 줄이기 위해 포인트 테이블 유지하기

사용자가 기사를 읽거나 기사에 댓글을 쓰거나 기사를 공유하는 경우 회원에게 평판 포인트를 제공합니다. 예를 들어 내 멤버가 세 가지를 모두 수행하면 DB 테이블에 세 개의 개별 행이 생깁니다. 멤버 포인트를 표시 할 때 SUM 쿼리를 사용하여 해당 멤버의 모든 포인트를 계산합니다.

현재 명성이 높은 100 만 명 이상의 회원이 내 테이블에 많은 행을 가지고 있으며 어떻게 든 정리하고 싶어합니다. Cron Job을 사용하여 3 개월 이상 된 각 멤버의 모든 평판 행을 하나의 행으로 병합하고 싶습니다. 예를 들어 :

user  | repTask      | repPoints | repDate 
-----------+-------------------------------+--------------+----------------------- 
    10001 + Commented on article   | 5   | 2012-11-12 08:40:32 
    10001 + Read an article    | 2   | 2012-06-12 12:32:01 
    10001 + Shared an article   | 10   | 2012-06-04 17:39:44 
    10001 + Read an article    | 2   | 2012-05-19 01:04:11 

이 될 것입니다 :

user  | repTask      | repPoints | repDate 
-----------+-------------------------------+--------------+----------------------- 
    10001 + Commented on article   | 5   | 2012-11-12 08:40:32 
    10001 + (merged points)    | 14   | Now() 

또는 (병합 개월) :

user  | repTask      | repPoints | repDate 
-----------+-------------------------------+--------------+----------------------- 
    10001 + Commented on article   | 5   | 2012-11-12 08:40:32 
    10001 + (Merged for 06/2012)   | 12   | Now() 
    10001 + (Merged for 05/2012)   | 2   | Now() 

3 개월은 합법적 인 것으로 간주됩니다 아무것도 이후에 취소해야 할 수도 있습니다 전에 아무것도 - 속임수를 쓰는 경우, 왜 3 개월이 걸릴지.

우선,이 것이 좋은 생각입니까? 저는 3 년 동안 100 만 줄의 행을 쓰는 것을 피하려고합니다. 포인트를 병합하는 것이 좋지 않은 경우 입력 된대로 데이터를 저장하는 더 좋은 방법이 있습니다. 분명히 이미 입력 한 것을 변경할 수는 없지만 미래에 더 나아질 수 있습니다.

이것이 좋은 생각이라면 데이터를 수정하는 효율적인 쿼리를 찾기 위해 애 쓰고 있습니다. 나는 정확한 코드를 찾고 있지는 않지만 누군가가 3 개월보다 오래된 모든 포인트를 병합하거나 각 사용자에 대해 또는 3 개월보다 오래된 모든 포인트를 별도의 개월로 병합 할 수있는 적합한 쿼리를 설명하는 데 도움을 줄 수 있다면 각 사용자에 대해 매우 도움이 될 것입니다.

답변

2

당신 cron 작업으로, 그런 식으로 할 수 있지만 이것에 대해 어떻게 : 가 포인트가 추가됩니다 trigger 또는 procedure 그래서 언제 만들기, 그것은 언제든지 점을 사용자 테이블에 total 열을 업데이트하고, 는 무효화 된 total 열에서 제외됩니까?

이 방법을 사용하면 포인트 테이블에 몇 백만 또는 수십억 개의 행이 있더라도 전체 점수 결과를 얻기 위해 쿼리 할 필요가 없습니다. 몇 달 또는 몇 년 동안 별도의 열을 가질 수도 있습니다. 또한 행을 삭제하지 않으므로 되돌릴 수 있으며 필요한 경우 1 년 전부터 소급하여 포인트를 취소 할 수 있습니다.

+0

멋진 아이디어! 나는 트리거 나 절차가 환상적이지는 않지만 이것은 그들에 대해 좀 더 배울 좋은 이유입니다. – TheCarver

관련 문제