////
Search
5️⃣

시간 데이터 저장

시 계열 스토리지의 사용 상황
상용시스템 성능 지표 수집 데이터가 오래될수록 덜 상세해지도록 조작
로컬 컴퓨터에 복사본 저장
통합하여 압축 보관
여러 다양한 데이터를 통합하여 하나의 시계열 데이터로 통합
원본 데이터들을 건드리지 않고 데이터를 호출하여 가공
시스템의 주요 요구 사항에 따른 방법 변화
크기에 따른 성능 확장 방법 오래된 데이터를 삭제하는 자동화된 스크립트를 사용
거대한 데이터의 집합(두 번째 사용 사례) 또는 증가하는 데이터 집합(세 번째 사용 사례)
데이터 접근에 대한 무작위적인 방식 대 순차적 방식
두 번째 사용 사례에서는 모든 데이터가 같은 정도로 접근된다는 것을 기대ㅘ
첫 번째와 세 번째 사용 사례는 가장 최근의 데이터일수록 더 빈번히 접근
자동화 스크립트
첫 번째 사용 사례는 자동화가 필요한 상황, 두 번째 사용 사례는 자동화 불 필요.
세 번째 사용 사례는 약간의 자동화가 필요

5.1 요구 사항 정의

얼마나 많은 시계열 데이터를 저장해야 하나요? 얼마나 데이터가 빠르게 증가하나요?
측정에 대한 업데이트가 끊임없이 발생하거나(예: 계속 이어지는 웹 트래픽 스트림), 측정이
구분되는 개별 사건 단위로 발생하나요(예: 지난 10년 동안 미국의 모든 주요 공휴일에 대한 시간 별 항공 교통 시계열)
데이터가 끊임없이 발생한다면 가장 최근의 데이터를 관찰
측정이 구분되는 개별 사건 단위라면 데이터에 대한 무작위적인 접근
데이터의 간격이 일정하거나 일정하지 않나요?
데이터의 간격이 일정치 않다면
데이터 접근이 발생하는 시점의 예측이 어렵기 때문에 데이터를 쓰기나 쓰지 않는 기간을 효율적으로 활용 가능 하게 끔 준비
지속적으로 데이터를 수집할 것인가요? 아니면 프로젝트가 마무리되는 시점이 정해져 있나요?
데이터 수집이 종료되는 시점이 정해져 있다면
수용해야 할 데이터셋의 크기를 보다 쉽게 예상
시계열로 하려는 것이 무엇인가요? 실시간으로 시각화가 필요한가요? 신경망이 수천 번 반복적 으로 접근할 전처리된 데이터가 필요한가요?
데이터를 원본 그대로 저장할지, 처리된 형태로 저장할 지, 메모리상의 데이터를 시간축에 따라 위치시킬지, 다른 축에 따라 위치시킬지, 데이터의 읽 고 쓰기에 쉬운 형식으로 저장해야 할지와 같은 사실을 결정

5.1.1 실시간 데이터와 저장된 데이터

불 필요한 데이터의 저장을 피하고, 최적의 스토리지를 구성하여 데이터 찾는 데 드는 시간을 줄여야 함
웹페이지를 로딩하는 데 걸리는 시간을 기록하는 웹 서버 를 구동
근무시간 동안 성능 문제가 발생하지 않았다는 것을 확인
⇒ 개별 데이터를 모두 저장 하기 보다는 종합하는 기법을 사용하여 데이터 스토리지를 간소화하는 것이 좋음
정보의 유실 없이 데이터를 줄일 수 있는 경우
천천히 변하는 변수 ⇒ 값이 변한 데이터만 기록
노이즈가 낀 높은 빈도의 데이터 ⇒ 높은 수준의 노이즈는 각 개별 측정의 가치를 떨어뜨리기 때문에 사전에 데이터의 종합 집계를 고려하여 집계하지 않을 수 있음
오래된 데이터  ⇒ 새로운 시계 열 데이터셋의 기록을 시작할 때마다 시계열 데이터가 언제 도태될지 미리 생각
법적 고려 사항을 시스템의 설계에 반영

5.2 데이터베이스 솔루션

데이터베이스
데이터 분석가와 엔지니어에게 친숙하고 직관적인 데이터 저장방식을 제공하는 솔루션
데이터베이스 선택 이유
여러 서버로 확장 가능한 스토리지
저지연의 읽기/쓰기
일반적인 지표의 내장된 계산 함수
(예: 시간지표에 group-by 연산이 적용 가능할 때 group-by 질의에서 평균을 계산하는 것)
시스템의 성능 튜닝 및 병목 문제 분석에 사용되는 문제 진단 및 모니터링 도구

5.2.1 SQL과 NoSQL

SQL
관계형 테이블, 대용량 시계열 데이터 위해 SQL 솔루션 확장시 성능 저하 발생
NoSQL
시간 범위가 무한한 시계열 데이터의 수용이 가능하도록 확장될 수 있는 개병형 솔루션 필요시
원래의 SQL 데이터베이스로부터 영향을 받은 데이터의 특성
과거 SQL 솔루션은 트랜잭션 데이터 기반
여러 기본키의 속성들로 구성(상품,참가자,시간,거래 가치 같은 정보)
시간도 기본키로 다뤄질 수 있음-권한있는 정보축이 되어선 안됨
시계열과는 다른 트랜잭션 데이터의 주요 특징
이미 존재하는 데이터의 업데이트 빈번히 발생
기본적으로 데이터가 정렬되지 않아 무작위적인 접근 이뤄짐
시계열 데이터의 특성
이력(history)을 상세히 다룸(트랜잭션 형태의 기록은 최종 상태만 알 수 있음)
업데이트되지 않는 것이 일반적
데이터를 임의의 순서로 쓸 수 있는 작업은 중요치 않음
읽기 작업보다 쓰기 작업이 빈번하게 발생함
데이터의 쓰기, 읽기 업데이트 작업은 일련의 사건이 일어나는 시간 순서에 따라 이루어짐
트랜잭션 데이터보다 훨씬 더 동시성 읽기가 수행될 가능성이 높음
시간 외에 변수를 기본키로 두는 경우는 매우 드묾
개별 데이터 삭제보다 데이터 뭉치를 삭제하는 것이 더 일반적
→ NoSQL 데이터베이스가 시계열 데이터에 좀 더 적합
→ NoSQL이 SQL보다 쓰기작업 성능 뛰어남
SQL과 NoSQL을 선택하는 방법
데이터를 고려할 때 어떤 스토리지에도 항상 적용되는 원칙
같은 시간에 요청되는 경향이 있는 데이터는 같은 위치에 저장되어야 함
시계열에 대해 SQL의 장점
해당 데이터베이스에 이미 저장된 관련성을 가진 다른 비시계열 데이터와 손쉽게 연관 가능
계층적인 시계열 데이터-관계형 테이블 적절함, 계층 설명과 관련 시계열의 그룹화 가능
SQL 데이터베이스에 가장 잘 맞는 트랜잭션 데이터 기반한 시계열
→ 시계열의 동일 데이터베이스에 저장하여 쉬운 검증 및 상호 참조 등의 이점
시계열에 대해 NoSQL의 장점
스키마가 없거나 유연한 스키마
비구조화된 데이터
대용량 및 분산 데이터 처리 적합
쓰기 속도가 빠름
비전문가도 즉시 사용이 가능함

5.2.2 인기 있는 시계열 데이터베이스와 파일 솔루션

시계열에 특화된 데이터베이스
인플럭스 DB
오픈소스 시계열 데이터 베이스, 평가 지표, 사건의 기록과 성능 분석에 유용
푸시기반 데이터베이스 시스템(직접 데이터를 넣어줘야 함)
시간 인식-모든 데이터 타임스탬프 자동적용
SQL과 유사한 질의 방식 사용 (SELECT * FROM access_counts WHERE value >10000)
구성 요소
타임스템프
측정 내용을 나타내는 레이블
하나 이상의 키/값 필드(예:온도=25.3)
키/값의 쌍으로 구성된 메타데이터 태그 정보
장점
오래된 데이터의 지정 및 삭제 작업을 쉽게 자동화할 수 있는 데이터 보존 기능
데이터의 빠른 수집 속도 및 적극적인 데이터 압축 기능
시계열이 특정 기준으로 빠르게 색인하기 위해 각 시계열에 태그를 달 수 있는 기능
시계열 데이터의 수집, 저장, 모니터링, 출력 모두를 포함하는 성숙된 TICK 스택의 한부분을 차지하여 해당 스택과 쉬운 조화가 가능
시계열 스토리지 솔루션을 배가할 수 있는 성능 모니터링 도구
프로메테우스
HTTP 기반으로 동작하는 모니터링 시스템 & 시계열 데이터베이스
풀기반pull-based 시스템
장점
시계열 데이터 수집 방법 및 중앙 서버에 저장되는 데이터의 빈도에 대해 로직을 쉽게 조정하고 검사할 수 있음
성능 모니터링을 위한 빠르고 간편 기술
단점
데이터가 완전 최신 상태라고 장담할 수 없음
데이터가 항상 100% 정확해야 하는 애플리케이션에 적합하지 않음
질의에 PromQL라는 함수표현 언어사용
PromQL을 통해 시계열에서 다뤄지는 여러 일반적인 작업을 위한 API 제공
Predict_linear() 예측 수행
Rate() 시계열의 단위 시간당 증가율 계산, 간단한 인터페이스 통해 일정기간 집계 가능
유지보수를 위한 모니터링과 분석에 집중하는 경향 보임(데이터 관리 위한 자동화 기능 부족)
실시간 스트리밍 애플리케이션, 데이터 가용성이 가장 중요한 상황에 유용한 시계열 스토리지 솔루션임
범용 NoSQL 데이터 베이스
테이블 구조가 아닌 문서 구조에 기반
시계열에 특화된 기능을 많이 포함하지 않는 것이 일반적
유연한 스키마 덕분에 시계열 데이터에 유용
데이터수집,채널 개수 변동 있는 새로운 프로젝트에서 유용
SQL 시간에 따란 변화하는 구조에서 NaN 발생, 직사각형 형태로 데이터 유지
NoSQL 누락된 데이터의 특정값은 단순히 누락된 상태 그대로
몽고DB(스키마의 유연성)
성능좋은 NoSQL 기반 시계열 데이터베이스
IoT 친화적인 구조 및 지침의 개발
시간 및 시간 관련 그룹 단위의 고수위 집계 기능을 제공
요일 또는 월처럼 사람이 이해하기 편한 형식으로 시간을 나누는 자동화기능 제공
$day0fWeek
$day0Month
$hour
광범위한 문서화 작업

5.3 파일 솔루션

데이터베이스
스크립트+데이터 스토리지 모두 통합하여 작업 수행하는 소프트웨어à 단층 파일이 됨
단층파일 선택하는 경우
성숙된 데이터 형식 완성되어 오랜 기간동안 합리적으로 그 명세를 따를 수 있는 경우
데이터 처리가 I/O와 밀접하게 관련, 속도의 향상에 개발 시간을 할애하는 것이 합리적인 경우
데이터의 무작위적인 접근보다 순차적 접근이 필요한 경우
데이터베이스로의 데이터를 단층파일로 마이그레이션할 만한 이점
단층파일은 특정 시스템에 종속적이지 않음
데이터 공유시 파일을 이미 알려진 형식으로 제공
데이터 원격접근, 미러링된 데이터 베이스 구축 요청 필요없음
단층파일이 데이터베이스보다 I/O 오버헤드 낮음
단층파일을 읽는 작업이 훨씬 간결
단층파일에서는 데이터의 읽히는 순서 표현가능
데이터를 가능한 최대로 압축가능 훨씬 적은 양의 메모리 차지

5.3.1 넘파이 & 5.3.2 팬더스

넘파이
데이터 순수 수치형으로만 구성시, 수치형 데이터 보관에 널리 사용되는 방식(파이썬 넘파이)
이점
여러가지 저장 옵션 제공
형식의 성능을 상대적으로 비교하는 많은 벤치마크 자료가 공개되어 있음
스토리지나 분석 측면에서 볼때 즉시 사용 가능한 좋은 성능 수준 만족하는 데이터구조
단점
단일 데이터 형식만 존재
행과 열에 레이블을 추가하는 자연스러운 방법 없음
팬더스
손쉬운 데이터의 레이블링
서로다른 시계열 데이터의 저장
여러종류의 데이터로 구성된 시계열 데이터에서 유용
발생한 사건수(int), 상태의 측정(flat), 레이블(string 또는 원핫 인코딩)등 여러 종류의 데이터로 구성

5.3.3 표준 R에 동등한 것 & 5.3.4 Xarray

장점
R 객체는 기본적으로 .Rds와 .Rdata 형식으로 저장
이진 파일 형식
텍스트 기반 형식보다 압축과 I/O 측면에서 효율적
언어에 비종속적인 형식으로 데이터 저장
단점
이진형식 대신 텍스트 기반의 파일형식 사용시 저장 공간의 상승과 I/O 속도저하 발생
파일 형식 옵션에 따른 크기 및 성능 비교
Xarray
시계열 데이터가 다차원적으로 넓어지면 Xarry가 유용함
Xarray가 유용한 이유
차원에 명명할 수 있는 기능 제공
넘파이 같이 벡터화된 수학적 연산 제공
팬더스같이 그룹화 연산의 제공
데이터베이스같이 시간 범위 기반의 색인 기능 제공
다양한 파일 스토리지의 옵션 제공(pickle 및 netCDF 이진파일 형식두개 지원)
시간에 대한 색인 및 리샘플링
특정 시간의 개별 요소에 대한 접근
→ 시간에 특화된 다양한 연산을 지원하는 데이터 구조