매우 많은 양의 시계열 데이터를 저장하고 쿼리 할 수 있어야합니다.
데이터의 속성은 다음과 같습니다.
- 시리즈 수 : 약 12.000 (12,000)
- 전 세계의 데이터 포인트 수 : 한 달에 약 500.000.000 (5 억)
- 혼합 값 유형 : 대부분의 데이터 포인트는 부동 소수점 값이고 나머지는 문자열입니다
- 샘플링주기 : 시리즈 간 및 시리즈 내 변수
- 타임 스탬프 : 밀리 초 정밀도
- 데이터 보존 기간 : 붕괴 또는 다운 샘플링없이 몇 년
- 데이터 아카이브는 거의 실시간으로 구축해야하지만 합리적인 지연 (~ 1 시간)이 허용됩니다.
- 필요한 경우 과거 데이터를 재 구축 할 수 있지만 높은 비용
- 때때로, 그러나 아주 드물게 일부 과거 데이터를 업데이트해야합니다
계획된 쿼리의 속성 :
- 데이터에 대한 대부분의 쿼리는 타임 스탬프 기반 쿼리입니다. 하루에서 몇 개월 / 년까지 다양합니다. 90 % 이상이 최신 데이터에 대한 쿼리입니다.
다른 요구 사항 :
- 이 솔루션은 무료 맥주와 마찬가지로 무료이어야하며 오픈 소스
내 생각은 PyTables / Pandas를 HDF5 파일 과 함께 SQL 데이터베이스 대신 백엔드로 저장하는 것으로 생각했습니다 .
질문 :
PyTables / Pandas가 "최상의"경로라고 가정하면 데이터를 여러 HDF 파일로 분할하는 것이 좋습니다. 각 파일은 주어진 시간에 걸쳐 있거나 단일 파일에 넣은 다음 큰 파일이됩니까?
고정 또는 표 형식을 선호합니까? 한 달에 하나의 HDF 파일을 유지하면 고정 형식이 정상적으로 보입니다.이 방법으로 전체 시리즈가 RAM에 적합하고 테이블 형식 색인이 없어도 메모리 내에서 슬라이스 할 수 있습니다. 나 맞아 ?
이것이 최선의 방법 이 아닌 경우이 데이터 저장소를 어떻게 구성해야합니까? 또는 어떤 기술을 고려해야합니까? 대규모 시계열 데이터 세트를 다루는 것은 처음이 아닙니다.이 문제를 해결하는 일반적인 방법은 무엇입니까?
내가 고려한 다른 접근법 :
- 배열 데이터베이스 : 배열의 시작 및 종료 시간과 샘플링 기간 만 저장하면되므로 배열 자체의 값과 인덱싱이 쉬우므로 일정한 샘플링 기간을 가진 시계열에 가장 적합합니다. 그러나 시리즈 자체 내에서 가변 샘플링 기간을 사용하면 타임 스탬프-> 값 관계를 더 가깝게 유지해야합니다. 제 관점에서 배열 DBMS에 적합하지 않습니다.
- 타임 스탬프, paramID, 값이 열인 표준 SQL 데이터베이스이지만 특성상 쿼리에 대해 많은 디스크 I / O를 요청합니다.