센서 어레이에서 대량의 데이터 저장


14

거대한 센서 배열에서 데이터 샘플을 저장하는 솔루션 (app 및 db)을 구현해야했습니다. 이 어레이는 현재 약 20,000 개의 센서로 구성되어 있지만 곧 최대 100,000 개의 센서로 확장 될 것입니다. 각 센서는 10 초마다 데이터 샘플을 전송하며 각 샘플의 크기는 28 바이트입니다.

따라서 합계를 수행하면 다음이 발생합니다.

  • 하루에 센서 당 8640 개의 샘플
  • 하루에 센서 당 242kB의 데이터
  • 일일 864 백만 샘플

이제 데이터를 저장 / 검색하는 가장 좋은 방법이 무엇인지 궁금했습니다. 소프트웨어가 이미 지정된 후에이 프로젝트에 "참여"되었으므로 SQL Server를 사용하여 Windows 플랫폼에서 구현해야합니다.

내 머리 속에있는 현재 솔루션은 데이터 샘플을 저장하기 위해 두 개의 테이블이있는 DB를 만드는 것입니다. 첫 번째는 두 번째로 정렬 된 인덱스의 역할을하며, 한 번에 센서 단위로 이진 필드에 대조 된 샘플을 저장합니다.

Table 1:

  RecordID - BigInt - Identity
  SensorID - BigInt - Primary Key
  Date - DateTime - Primary Key (yyyy-mm-dd)

Table 2:

  RecordID - BigInt - Primary Key (from an insert into Table 1)
  Data - Binary 

기본적으로 모든 센서의 샘플을 임시 파일 (센서 당 1 개)에 씁니다. 하루가 끝나면 표 1에 항목을 생성하고 생성 된 RecordID를 사용하여 파일을 표 2의 데이터 필드에 덤프합니다.

이 방법으로 매일 8 억 8 천 5 백만 개의 항목이 아닌 하루 10 만 개의 항목이 테이블에 입력됩니다. LAN 또는 고속 WAN에서 데이터를 사용할 수 있어야하므로 하루 종일 센서 데이터를 검색 할 수 있습니다.

모든 데이터를 저장해야하지만 대부분의 데이터를 읽지 못할 수 있습니다. 따라서 테이블에 대한 읽기 양은 쓰기보다 크게 많지 않습니다.

데이터 파일의 경로를 저장하여 파일 시스템을 사용하여 무언가를 구현할 수 있다는 것을 알고 있지만 이진 필드는 256kB보다 덜 감사하는 동안 SQL Server가 NTFS보다 성능이 뛰어납니다. (회색 영역은 256kB와 1MB 사이이며 NTFS는 이진 크기가 1MB보다 큰 경우 SQL Server보다 성능이 뛰어납니다.)

또한 폴더에 많은 양의 파일이 있거나 각 폴더에 몇 개의 파일이있는 복잡한 트리 구조를 가짐으로써 파일 시스템에서 문제를 일으키지 않고 100,000 센서의 데이터를 자체 파일에 저장하는 것에 약간 조심합니다. 파일 조각화도 고려합니다.

  1. 누구든지 위의 실용적인 조언 / 의견을 제공 할 수 있습니까?

  2. 내가 빠질 명백한 함정이 있습니까?

  3. 샘플 데이터는 상당히 잘 압축됩니다. 242kB 파일은 약 85kB로 압축됩니다. 그러나 샘플 데이터 (열)가 자동으로 압축되도록 데이터베이스 수준에서 일부 압축 유형을 구현할 수 있습니까?

  4. 이 프로젝트에서 SQL Server가 분명히 잘못된 선택입니까?

  5. 두 테이블의 디자인이 현명합니까, 아니면 두 테이블처럼 여전히 "성능이있는"단일 테이블로 결합 할 수 있습니까?


5
SQL Server는 이와 같은 행 수준 및 테이블 수준 압축을 지원합니다.
JNK

2
1 개의 입력 / 센서 / 일만 있기 때문에 Table1이 필요합니까?
GalacticJello

2
이 데이터가 데이터베이스에 있으면이 데이터로 무엇을 하시겠습니까? 센서 데이터를 이진 형식으로 집계 할 수 있다고는 상상할 수 없습니다.
datagod

1
100,000 개의 센서 X 초당 10 개의 샘플 X 샘플 당 28 바이트 x 하루 24 시간 = 하루 2.2TB. 그것은 두 개의 테이블에 넣을 것이 많습니다.
datagod

2
@ AlexKuznetsov : SQL Server 선택에 대해 궁금해했지만 Microsoft 골드 파트너이므로 이것이 주된 이유라고 생각합니다.
Oliver

답변:


12

예, 상당히 빨리 빠져들게 될 큰 함정이 있으며 이는 테이블의 크기와 유지 관리에 있습니다. 데이터를 매일 임시 테이블에 저장하고 영구 테이블로 옮기고 싶다고 말하면 올바른 방향으로 가고 있지만 곧이 구성표에 문제가 발생할 수 있습니다.

예를 들어, 2 년 후 가장 오래된 월별 데이터를 "롤오프"한다고 가정합니다. 디자인에서 큰 테이블에 대해 DELETE 문을 발행해야합니다. 가지고있는 인덱스 수에 따라 다소 느려질 수 있습니다. 또한 인덱스 조각화가 발생하며이 문제를 해결하는 유일한 방법은이 큰 테이블에서 인덱스를 다시 작성하거나 재구성하여 성능 문제를 발생시키는 것입니다. 큰 단일 테이블 유형 디자인과 관련된 다른 많은 문제가 있습니다. 예를 들어, 큰 단일 테이블을 사용하면 FILEGROUP 기반 백업을 수행 할 수 없습니다. 즉, 데이터베이스의 전체 백업을 원할 경우 데이터베이스가 커지고 완료하는 데 오랜 시간이 걸립니다.

해결책은 무엇입니까? 테이블 파티셔닝. 가능한 한 많은 장소에서이 내용에 대해 자세히 읽어보십시오. 기본적으로 파티셔닝을 사용하면 데이터를 "테이블 내 테이블"로 분할 할 수 있습니다. 각 파티션은 동일한 스키마를 공유하고 테이블 개체를 통해 액세스되지만 인덱스 및 유지 관리는 다르게 할 수 있습니다. 파티션은 기본적으로 유용한 키로 잘린 테이블입니다. 귀하의 경우 날짜 일 가능성이 높습니다. 그것들은 테이블처럼 (그리고 빨리) 삭제 될 수 있습니다. 즉, 날짜별로 빅 데이터 테이블을 분할하면 다른 파티션의 인덱스에 부정적인 영향을주지 않으면 서 기존 파티션을 즉시 삭제할 수 있습니다. 파티션을 다른 파일 그룹에 배치 할 수 있습니다. 즉, 일반적으로 사용하지 않는 오래된 파티션을 저렴한 상용 스토리지로 롤오프 할 수 있습니다. 마지막으로, SQL 2012에서는이전의 읽기 전용 파티션 에서는 모든 센서 데이터를 삽입하는 활성 파티션에서 다른 삽입 지향 인덱싱 구성표를 사용합니다.

도움이 되었기를 바랍니다. 파티셔닝 및 파티셔닝 구성표에 관해 많은 연구가 필요하지만, 이제는 원하는 방향을 알고 있기를 바랍니다.

추신 : 아, 그리고 당신의 글 머리 기호 목록을 잊어 버렸습니다 ... 답변 1, 2, 5. 위를 참조하십시오. 대답 3 : SQL Server에서는 파티션별로 파티션을 압축 할 수 있으므로 PAGE 압축을 사용하여 이전 파티션을 적극적으로 압축하십시오. 그러나 이렇게하면 행 외부의 큰 데이터 유형이 압축되지 않는다고 생각합니다. 다시 센서 값을 정규화 하여이 문제를 완화 할 수 있습니다. 답 4 : 물론 그렇지는 않지만 하루에 정적 데이터를 저장하고 다른 방법으로 검색하지 않으면 압축 된 플랫 파일이 훨씬 더 쉬울 수 있습니다.

PPS : 아, 그리고 다른 것. 이 작업을 모두 수행하기 위해 2 테이블 솔루션이 필요하지 않습니다. 큰 이진 센서 데이터는 VARBINARY (MAX) 유형이어야합니다. 값은 " out of row " 로 저장할 수 있지만 여전히 단일 테이블의 열 이기 때문입니다 ( sp_tableoption 설명서 참조 ). 그러나 테이블에있는 이진 데이터에서 일부 센서 데이터를 정규화하는 것이 좋습니다. 그렇지 않으면 데이터베이스가 시간별로 센서 데이터 청크를 검색하는 것 이상으로 적합하지 않기 때문입니다.


멋진 정보, 감사합니다. 이 경우 "정규화"의 의미가 무엇인지 확실하지 않습니다. 나는 데이터 청크에서 더 유용한 필드를 추출하여 자체 열에 저장해야한다는 것을 의미한다고 가정합니다. 그렇다면 내가 처음에 이것을하고 싶지 않은 이유는 하루에 8 억 8 천만 행을 끝내기 때문입니다. 모든 것을한데 모아 하나의 청크로 저장하면 하루에 100,000 행만됩니다. 아니면 더 좋은 방법이 있습니까?
Oliver

1
데이터베이스를 사용하는 경우에는 그렇습니다. 올바른 하드웨어, 인덱싱 구성표 및 파티셔닝 구성표를 사용하면 하루에 864 백만 행을 효율적으로 처리 할 수 ​​있습니다. 그것은 모두 요구 사항이 무엇인지, 모든 데이터를 저장 하는지 에 달려 있습니다. 보관 목적으로 만 사용하는 경우 이진 열에 문제가 없습니다. SQL Server를 사용하여 비즈니스 가치를 추출하려면 완전히 다른 이야기입니다.
Dave Markle

0

하둡 솔루션을 고려하십시오. 2 Tb / day가 빠르게 추가됩니다. 또한 델타 레코드, 즉 초기 값 만 기록한 다음 변경이 발생할 때만 기록하는 것을 고려하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.