이번 BNK 법인이익 프로젝트에 경남은행쪽을 진행하던 중
몇몇 테이블들이 시계열 테이블 구조로 이루어져 있다는 것을 알게되었다.
1. 시계열 데이터베이스(TSDB, Time Series Database) 란?
[ 시계열 데이터(Time Series Data) 란? ]
Time-Stamped Data라고도 불리는 Time Seriese Data(시계열 데이터)는 시간에 따라 저장된 데이터를 의미한다. 시계열 데이터들은 동일한 소스로부터 시간이 지남에 따라 만들어진 데이터들로 구성되므로 시간 경과에 따른 변화를 추적하는데 용이하다.
출처: https://mangkyu.tistory.com/188 [MangKyu's Diary:티스토리]
즉, 매일매일 어제와 같은데이터에 + 오늘 누적되는 데이터를 집어넣는 식의 구조라는 얘기다.
예시로 들자면
기준일자 | 고객번호 | 고객명 | 생성날짜 |
2022.08.04 | 100100 | 이좌형 | 2022.08.04 |
2022.08.04 | 100200 | 이동겸 | 2022.08.04 |
2022.08.05 | 100100 | 이좌형 | 2022.08.04 |
2022.08.05 | 100200 | 이동겸 | 2022.08.04 |
2022.08.05 | 100300 | 차상길 | 2022.08.05 |
2022.08.05 | 100400 | 최호연 | 2022.08.05 |
이런식으로 데이터가 들어간다는 말이다. (2022.08.05 기준 SELECT)
뚜렷한 장점은 4일 -> 5일 넘어가는 과정에서 무엇이 생성되었고 무엇이 삭제되었는지를 보기 쉽다는 것이다.
단점은 보다시피 매일 데이터가 누적으로 새로 입력되다보니 굉장한 리소스를 잡아먹는다고 볼 수 있다.
이러한 테이블 구조를 처음 접한 채로 해당 테이블의 정보를 가져와야하는 쿼리를
SELECT 고객명
FROM 시계열테이블
WHERE 기준일자 = (
SELECT MAX(기준일자)
FROM 시계열테이블
WHERE 기준일자 <= 현재일자(param)
)
이런식으로 작성했다....
상무님이 기가막히셨는지 나를 불러다가 시계열 테이블에 대해 설명해주시고는 이런식으로 작성하면 어마어마한 리소스를 먹는다고 알려주셨다.
그도 그럴것이 시계열테이블의 기준일자의 MAX값을 구하는 과정은 모든 행을 다 조회를 해보기 때문이다.
보통 이렇게 시계열 테이블이 존재할 경우에는 그 기준일자를 명확하게 걸어서 보는것이 좋다.
SELECT 고객명
FROM 시계열테이블
WHERE 기준일자 = TO_CHAR((SYSDATE-1),'YYYYMMDD')
항상 아침에 배치가 돌면서 테이블에 적재 할 것이기에 이런식으로 전일자 값을 가져온다거나 하는 식으로 작성해야한다.
다만... 현실적인 문제는 개발서버DB는 운영서버DB와 항상 같은 데이터가 존재 할 수는 없기에
개발DB에 원천 테이블 정보를 이관시켜주는 경우 기준이 되는 몇개월의 데이터만 적재를 해준다.
따라서 개발에서는 날짜를 하드코딩으로 박아주고 사용하다가 운영 넘어오면서 변경해줘야 하는데
절대 실수가 없게 잘 챙겨야 하는 부분 중 하나이다.
++ 이 날부터 내 별명은 MAX가 되었다... ^-^;;;
'오답노트 > BNK' 카테고리의 다른 글
[IE to Edge] GET방식의 특수문자 (2) | 2022.09.08 |
---|---|
[ORA-01861] - literal match Error TO_CHAR , TO_DATE, LAST_DAY 사용 주의 (1) | 2022.08.29 |
MAX와 KEEP (0) | 2022.08.04 |