본문 바로가기
Mysql

mysql 게임 서버 MAU 처리

by NaHyungMin 2018. 6. 20.

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

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


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는 필요하지 않아 처리하지 않았다.

'Mysql' 카테고리의 다른 글

mysql sum if 사용  (0) 2018.10.02
접속자 통계  (0) 2018.09.13
mysql 스케줄러 사용  (0) 2018.06.20
mysql Delete Trigger 사용  (0) 2018.05.16
mysql root 비밀번호 변경  (0) 2018.04.16