실시간으로 입력 신호 (숫자)를 기록하는 소프트웨어를 개발할 때이 데이터를 어떻게 저장하고 압축하는 것이 가장 좋을까요? SQL 엔진이 앞으로는 빠른 데이터 마이닝을 허용하거나, 초당 최대 1000 개의 데이터 샘플에 적합하거나 압축 될 수있는 다른 데이터 형식이 있습니까?실시간 데이터 로깅을 위해 데이터를 저장하고 압축하는 방법은 무엇입니까?
저는 VC++로 작성하는 데 신경 쓰지 않지만 C#에 적용 할 수있는 아이디어가 이상적입니다.
실시간으로 입력 신호 (숫자)를 기록하는 소프트웨어를 개발할 때이 데이터를 어떻게 저장하고 압축하는 것이 가장 좋을까요? SQL 엔진이 앞으로는 빠른 데이터 마이닝을 허용하거나, 초당 최대 1000 개의 데이터 샘플에 적합하거나 압축 될 수있는 다른 데이터 형식이 있습니까?실시간 데이터 로깅을 위해 데이터를 저장하고 압축하는 방법은 무엇입니까?
저는 VC++로 작성하는 데 신경 쓰지 않지만 C#에 적용 할 수있는 아이디어가 이상적입니다.
소스가 무엇인지, 저장된 데이터를 쿼리해야하는지 등과 같은 추가 정보가 없으면 말하기 어렵습니다.
그러나 1000 샘플/초의 경우 메모리에서 몇 초간의 데이터를 잡고 다른 스레드의 영구 저장소에 대량으로 기록해야합니다. (다중 프로세서 시스템 권장).
관리되는 언어를 사용하여 수행하려는 경우 동일한 데이터 구조로 샘플 보관 - GC가 메모리를 너무 자주 수집 할 필요가 없도록합니다. 포인터와 안전하지 않은 키워드 (메모리 구조에 대한 직접 액세스를 제공하고 배열의 범위 검사 코드를 제거함)를 사용하여 성능을 약간 향상시킬 수 있습니다.
각 샘플을 수집하는 데 CPU 시간이 얼마나 필요한지 알 수 없습니다. 시간을 결정하는 데있어 얼마나 중요한지는 지정된 시간에 각 샘플을 읽는 것입니다 (읽는 장치에서 버퍼에 저장됩니까?). 샘플링이 시간에 민감한 경우 샘플 당 1ms가 소요됩니다. 그리고 나서 가비지 콜렉터의 위험을 감당할 수 없을 것입니다. 잠시 동안 스레드를 차단할 것입니다. 이 경우 관리되지 않는 접근 방식을 사용합니다.
SQL Server는 쉽게 데이터를 보관하거나 파일에 쓸 수 있습니다. 그것은 주로 당신이 나중에 데이터로 무엇을해야하는지에 달려 있습니다. 각 샘플의 양은 얼마인지 알 수 없지만 8 바이트라고 가정합시다. 그런 다음 원시 데이터를 기록하기 위해 초 당 8000 바이트가 있습니다. 아마도 약간의 오버 헤드가있을 수 있으므로 10kB/s가 될 수 있습니다. 내가 생각할 수있는 대부분의 저장 메커니즘은이 속도로 데이터를 쓸 수 있습니다. 샘플링을하고있는 스레드가 아닌 다른 스레드에 쓰십시오.
초당 1000 데이터 샘플, 그러나 몇 초입니까? –
"영원히"생각하십시오! 제 의뢰인은 제가 그 매개 변수에 대한 통제권이 없다고 말합니다. –