필자는 일종의 데이터 저장소에 영구적으로 저장해야하는 과학 측정 데이터가 있습니다.시계열 데이터 용 데이터 저장
나는 100000 센서의 측정 값을 저장하는 방법을 찾고 있는데, 측정 데이터가 수년에 걸쳐 누적되어 센서 당 약 1 000 000 측정 값이됩니다. 각 센서는 매분 1 회 또는 더 적은 횟수로 판독 값을 생성합니다. 따라서 데이터 흐름은 그리 크지 않습니다 (전체 시스템에서 초당 약 200 회 측정). 센서가 동기화되지 않았습니다.
데이터 자체는 [timestamp] [sensor #] [value]의 세 쌍의 스트림으로 제공되며 모든 값은 32 비트 값으로 나타낼 수 있습니다.
가장 간단한 형식에서이 스트림은있는 그대로 3 개의 단일 열 테이블로 저장됩니다. 다음 쿼리는 다음과 같습니다 데이터 질량이 크고, 우리가 원하는 데이터가 그것으로 거의 균일하게 분산으로
SELECT timestamp,value
FROM Data
WHERE sensor=12345 AND timestamp BETWEEN '2013-04-15' AND '2013-05-12'
ORDER BY timestamp
불행하게도, 행 기반의 DBMS와이, 매우 가난한 성능을 제공합니다. (수십억 개의 레코드에서 수십만 개의 레코드를 선택하려고합니다.) 성능면에서 필요한 것은 사람이 소비 할 수있는 적절한 응답 시간입니다 (데이터는 사용자에게 그래프로 표시됩니다). 즉 몇 초에 데이터 전송을 더한 것입니다.
또 다른 접근법은 한 센서의 데이터를 하나의 테이블에 저장하는 것입니다. 그런 다음 쿼리가 될 것입니다 : 결과가 상대적으로 작은 (보통 미만 백만 이상의 행) 테이블에서 연속 행의 수를 것 같은
SELECT timestamp,value
FROM Data12345
WHERE timestamp BETWEEN '2013-04-15' AND '2013-05-12'
ORDER BY timestamp
이
은 좋은 읽기 성능을 제공한다.그러나 RDBMS에는 몇 분 안에 100,000 개의 테이블이 있어야합니다. 이것은 일반적인 시스템에서는 불가능한 것처럼 보입니다. 반면에 RDBMS는 데이터에 관계가 없으므로 올바른 도구로 보이지 않습니다.
나는 하나의 서버는 다음 미키 마우스 시스템을 사용하여 부하에 대처할 수 있음을 입증 할 수 있었다 :
- 각 센서는 파일 시스템에 자신의 파일이 있습니다.
- 데이터가 도착하면 해당 파일이 열리고 데이터가 추가되고 파일이 닫힙니다.
- 쿼리는 해당 파일을 열고 데이터의 시작 지점과 끝 지점을 찾고 그 사이의 모든 내용을 읽습니다.
매우 적은 코드 행. 성능은 시스템 (스토리지 유형, 파일 시스템, OS)에 따라 다르지만 큰 장애물은없는 것 같습니다.
그러나이 길로 가면 파티션, 백업, 스토리지 (클라우드)에서 이전 데이터를보다 깊게 이동하는 등의 코드를 작성하게됩니다. 그러면 내 자신의 DBMS를 롤링하는 것처럼 들립니다. (다시) 바퀴를 reinventing 같은 소리.
데이터 형식을 저장하는 표준 방법이 있습니까? 일부 영리한 NoSQL 트릭?
예, 이것은 정말 문제가되지 않지만 흥미 롭습니다. "프로그래머"또는 "컴퓨터 과학"과 같은 http://stackexchange.com/sites의 다른 모든 사이트를 확인하십시오. 나는 당신이 원하는 것이 매우 고성능이라고 말하고 싶습니다. SQL Server 또는 Oracle과 같은 "바닐라"시스템으로이 작업을 수행 할 수 있습니다. 그러나 속도 목표는 어렵습니다. 3 초 만에 10 억 개의 행 == 엄청난 처리 능력 및 고급 하드웨어 및 논리적 병렬 처리. 클라우드 시스템은 또한 전선에서 너무 느릴 것입니다. 약간의 속도를 포기할 수 있다면 이미 알고있는 것처럼 간단한 데이터 구조가 도움이되기 때문에 그렇게 힘들지 않습니다. –
문제를 더 명확하게 설명하기 위해 질문을 바꾸려고했습니다. 출력 대역폭은 문제가되지 않습니다. 한 번에 한 센서에서 적당한 양의 데이터 만 가져와야하기 때문입니다. 일반적인 쿼리는 20 000 데이터 포인트를 반환합니다. 멋진 하드웨어는 필요하지 않습니다. 적어도 예비 벤치 마크에서는 단일 서버로이를 수행 할 수 있다고 제안합니다. – DrV
니스. 이 경우 구현이 어떤 시스템보다 더 중요 할 것입니다. 데이터 아키텍처는 항상 핵심입니다. :) 재미있어! –