효율적인 자동화 된 작업을 설계하여 명성 포인트 테이블을 정리하는 데 어려움을 겪고 있습니다.행을 줄이기 위해 포인트 테이블 유지하기
사용자가 기사를 읽거나 기사에 댓글을 쓰거나 기사를 공유하는 경우 회원에게 평판 포인트를 제공합니다. 예를 들어 내 멤버가 세 가지를 모두 수행하면 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 개월보다 오래된 모든 포인트를 별도의 개월로 병합 할 수있는 적합한 쿼리를 설명하는 데 도움을 줄 수 있다면 각 사용자에 대해 매우 도움이 될 것입니다.
멋진 아이디어! 나는 트리거 나 절차가 환상적이지는 않지만 이것은 그들에 대해 좀 더 배울 좋은 이유입니다. – TheCarver