시계열 통계 테이블 관련 문의 0 1 794

by kjp [DB 모델링/설계] 시계열 통계 [2020.04.06 22:19:56]


안녕하세요.

DB 초보입니다. 레거시 시스템을 보고 있는데,

Device들은 주기적으로 Data를 report하고 그것이 device_raw_data에 저장됩니다.
device_raw_data를 기반으로 매일 batch 작업이 동작합니다.
간략히 테이블을 기술해보면,

 

device_raw_data
    system_id   varchar    index_statistics
    device_id   varchar     index_statistics
    target_date datetime
    yyyymm      varchar     index_statistics
    dd          varchar     index_statistics
    hh          varchar     index_statistics
    mm          varchar     index_statistics
    data        float

// 한시간단위 통계
device_data_hourly
    system_id   varchar    
    device_id   varchar
    target_date datetime
    yyyymm      varchar
    dd          varchar
    hh          varchar
    data        float

// 일단위 통계
device_data_daily
    system_id   varchar    
    device_id   varchar
    target_date datetime
    yyyymm      varchar
    dd          varchar
    data        float

// 월단위 통계
device_data_monthly
    system_id   varchar    
    device_id   varchar
    target_date datetime
    yyyymm      varchar
    data        float



raw_data를 가지고 나중에 BatchTask가 돌면서

data_houly 계산,
data_hourly가지고 data_daily 계산,
data_daily가지고 data_monthly계산하는 방식으로 되어 있는 것 같습니다.


1) 테이블에서 yyyymm, dd, hh, mm 등의 필드를 별도로 분리해서 두는 이유는 뭘까요?
   BatchTask 등에서 통계 계산시 group by 등을 할 때 성능 최적화를 위해서 그런 것 같은데,
   yyyymm, dd 등의 필드로 처리하지 않고 target_date(datetime) 가지고 날짜 함수로 조회하면 성능이 많이 차이나요?

  주위 분에게 여쭤보니   
  예전에는 yyyymm, dd, hh 같은 방식으로 많이 했다고 하는데, 

  요즘은 굳이 yyyy, mm, dd, hh저렇게 하지 않고 datetime만 가지고 처리해도 충분하다고 하기도 하고.


2) 반대로 yyyymm, dd, hh, mm 등의 필드가 있는데도 target_date를 별도로 두는 이유
   검색시 시간 구간 검색 query시 편의를 위해서일까요?

 

3) 일반적으로 시간/일/월 등의 시계열 통계 테이블은 어떤식으로 설계하시나요?

 

 

 

by 마농 [2020.04.07 08:00:04]

별도의 컬럼을 둔 것은 성능과는 무관하게 편의성 때문인 것 같습니다.
날짜 항목을 가공하여 조회함으로 인한 성능저하는 미비합니다.
날짜와 함께 각각의 항목이 있으면 저장공간이 낭비되구요.
날짜 없이 각각의 항목만 있으면 오히려 범위 검색이 어려워집니다.
하나의 항목만 있어야 편하고 각 항목을 하나로 합쳐야 합니다.
원본 데이터에는 datetime 항목만 있으면 되고
오히려 통계테이블에는 날짜 없이 각각의 항목이 하나로 합쳐져서 있으면 될 것 같습니다.
- 원본 : datetime
- 시간단위 통계 : yyyymmddhh24
- 일단위 통계 : yyyymmdd
- 월단위 통계 : yyyymm

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입