Taebu / prq_cdr

prq_cdr을 java 프로그램으로 구성합니다.
0 stars 0 forks source link

prq_cdr 속도개선 #5

Open Taebu opened 7 years ago

Taebu commented 7 years ago

count(*) cnt 부분을 trigger 처리 후 prq_sf_log 생성 mms 로그 성공한 값만 저장 핸드폰과 날짜 '0000-00-00'이 키가 된다.

create table prq_sf_log (
ms_hp varchar(20) not null default '' comment '핸드폰',
ms_date date not null default '0000-00-00' comment '날짜',
ms_success int unsigned not null default 0 comment 'mms성공갯수',
primary key(ms_hp,ms_date));

트리거 생성

delimiter |

CREATE TRIGGER success_log BEFORE INSERT ON prq.prq_mms_log
  FOR EACH ROW
  BEGIN
  SET @success=IF(substr(NEW.mm_result,1,1)="2",true,false);
  IF(@success) THEN
INSERT INTO prq_sf_log  VALUES (NEW.mm_sender,date(now()),1)
  ON DUPLICATE KEY UPDATE ms_success=ms_success+1;
  END IF;
  END;
|

delimiter ;

간단히 세도록 변경

private static int get_send_cnt(String mb_hp){
        int retVal = 0;
        StringBuilder sb = new StringBuilder();
        MyDataObject dao = new MyDataObject();
//             기존 코드     :  쿼리당 0.75초 0.425초 발생 개당 15씩이므로 6 ~ 11초 딜레이 예상
//      sb.append("SELECT count(*) cnt FROM `prq_mms_log` ");
//      sb.append("where mm_sender=? ");
//      sb.append("and left(mm_result,3)='200' ");
//      sb.append("and date(now())=date(mm_datetime);");

//      개선 코드 : 0.001초 예상 실제 0.000 초 쿼리 전일쿼리는 삭제 
        sb.append("select ms_success cnt from prq_sf_log ");
        sb.append("where ms_hp=? ");
        sb.append("and ms_date=date(now());");
        /*
    ...중략

익일 적용 예정