4-3. 시계열 데이터의 최적화
프로세스 시간과 이벤트 시간
▪ 스마트 폰에서 데이터를 수집할 때 메시지가 며칠 늦게 도착하는 경우가 발생, 지연을 예측해서 데이터 분석을 고려해야 함
▪ 이벤트 시간(event time): 클라이언트 상에서 메시지가 생성된 시간
▪ 프로세스 시간(process time): 서버가 처리하는 시간
▪ 데이터 분석의 대상이 되는 시간은 '이벤트 시간'
프로세스 시간에 의한 분할과 문제점
▪ 늦게 도달하는 데이터가 있기 때문에 실제에 가까운 집계 결과를 위해서는 '이벤트 시간'보다 며칠 정도 지난 시점에서 집계해야 함
▪ 분산 스토리지에 데이터를 넣는 단계에서는 이벤트 시간이 아니라 '프로세스 시간'을 사용
▪ 파일에 다수의 이벤트 시간 별 과거 데이터가 포함됨
▪ 특정 일에 발생한 이벤트를 집계하고 싶을때, 모든 파일을 열고 해당 날짜의 데이터만 뽑아내야 함
▪ 이는 데이터가 이벤트 시간으로 정렬되지 않아 모든 데이터를 로드하므로 시간과 자원 낭비가 큼
▪ 다수의 파일을 모두 검색하는 쿼리를 '풀 스캔(full scan)'이라 부름, 이는 시스템의 부하를 크게 높임
시계열 인덱스
▪ 이벤트 시간에 대해 인덱스를 만들어 데이터를 정렬
▪ Cassandra와 같은 '시계열 인덱스(time-series index)'에 대응하는 분산 데이터베이스를 이용
▪ 시계열 인덱스를 사용하면 짧은 범위의 특정 시간에 맞춘 데이터 집계를 빠르게 실행할 수 있음
▪ 하지만 장기간에 걸친 대량의 데이터를 집계하는 경우 분산 데이터베이스가 효율적이지 않음
▪ 장기적인 데이터 분석에서는 집계 효율이 높은 열 지향 스토리지를 사용
조건절 푸쉬다운
▪ 매일 한 번씩 도착한 데이터를 배치 처리로 변환하는 것을 고려
▪ 이벤트 시간으로 데이터를 정렬한 후에 열 지향 스토리지로 변환
▪ 열 지향 스토리지는 '칼럼 단위의 통계 정보'를 이용하여 최적화가 이루어짐 ex) 시간이면 각 칼럼의 시작 시각과 종료 시각이 모든 파일에 메타 정보로 저장
▪ 해당 통계를 이용하여 최소한의 데이터를 읽도록 하는 최적화를 '조건절 푸시 다운(predicate pushdown)'이라고 함
이벤트 시간에 의한 분할
▪ 프로세스 시간으로 파일을 나누고 있는 한, 동일 이벤트 시간 데이터가 다수의 파일에 분산되어 많은 파일을 열어야함
▪ 이벤트 시간을 사용하여 테이블을 분할
▪ 시간을 이용하여 분할된 테이블을 '시계열 테이블(time-series table)'이라고 함
▪ 새로 도착한 데이터를 새로운 파일로 만드는 경우 대량의 작은 파일이 만들어지게 되어 쿼리 성능이 악화
▪ 작은 데이터를 효율적으로 추가할 분산 데이터베이스를 만들거나 너무 오래된 데이터는 버리는 것이 필요
데이터 마트를 이벤트 시간으로 정렬하기
▪ 데이터 수집 단계에서는 프로세스 시간만을 사용하여 데이터를 저장
▪ 데이터 마트를 만드는 단계에서 이벤트 시간에 의한 정렬을 함
▪ 그러면 파일이 조각나는 일도 없고, 최적의 데이터 마트를 유지할 수 있음
[참고]
'Data Engineering > 책 리뷰' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 5. 빅데이터의 파이프라인 (1) (1) | 2023.11.12 |
---|---|
[빅데이터를 지탱하는 기술] 4. 빅데이터의 축적 (4) (0) | 2023.10.08 |
[빅데이터를 지탱하는 기술] 4. 빅데이터의 축적 (2) (0) | 2023.09.12 |
[빅데이터를 지탱하는 기술] 4. 빅데이터의 축적 (1) (0) | 2023.09.08 |
[빅데이터를 지탱하는 기술] 3. 빅데이터의 분산 처리 (3) (0) | 2023.09.07 |