Mysql

mysql 게임 서버 MAU 처리

NaHyungMin 2018. 6. 20. 17:30

기본적으로 로그인할때마다, 날짜가 다르면 로그인 날짜를 확인하는 기초 정보가 있어야 한다.

로그인 타임에 대한 정보가 있는 상태에서 다음과 같이 실행


1
2
3
4
5
6
7
8
9
10
1. 테이블 생성
 
CREATE TABLE `user_month_statistics` (
  `idx` INT NOT NULL AUTO_INCREMENT,
  `month_datetime` DATETIME NOT NULL,
  `cnt` INT NOT NULL,
  PRIMARY KEY (`idx`),
  INDEX `month_datetime` (`month_datetime` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2. 프로시저 생성
CREATE DEFINER=`작성자`@`%` PROCEDURE `sys_User_Month_Statistics_Insert`()
proc_label:BEGIN
 
    declare $last_day date;
    declare $cnt int;
 
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        -- default exception handler
        ROLLBACK;
        SET @@SQL_SAFE_UPDATES=1;
        RESIGNAL;        
    END;
 
    set $last_day = (SELECT LAST_DAY(DATE_FORMAT(CURDATE(),'%Y-%m-01')));
 
    if(CURDATE() <> $last_day) then
        leave proc_label;
    end if;
 
START TRANSACTION;
 
    #xx월 01 ~ xx월 말일 23:59:59까지
    set $cnt = (SELECT count(*FROM `테이블` where `logintime` >= DATE_FORMAT(CURDATE(),'%Y-%m-01'
            and `logintime` < DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH,'%Y-%m-01'));
    
    insert into `user_month_statistics` (`month_datetime``cnt`)
    values ($last_day, $cnt);
        
COMMIT;
    SELECT 0;
 
END
cs

1
2
3
4
3. 이벤트 추가
CREATE DEFINER=`작성자`@`%` EVENT `user_month_statistics`
ON SCHEDULE EVERY 1 DAY STARTS '2018-06-20 23:59:00' 
ON COMPLETION NOT PRESERVE ENABLE DO call sys_User_Month_Statistics_Insert()
cs


1
2
4. 이벤트 확인
show events;
cs


물론 작성자에 권한으로 해당 스키마에 event 권한을 줘야 한다.

해당 정보를 수정해서, 날 단위로 바꿔서 dau를 뽑아낼 수도 있는데 dau는 필요하지 않아 처리하지 않았다.