2010-01-19 5 views
0

내 PC에 연결된 다른 장치에서 스트리밍되는 (800Mb/s) 대용량 데이터 (> 500GB)를 저장해야합니다. 속도는 데이터베이스의 사용을 배제합니다. MySQl/ISAM과 내가 매우 큰 파일을 쓸 수있게 해주는 'C'stdio 파일 lib (즉, fopen/fclose/fwrite)의 맨 위에있는 빠르고 가벼운 라이브러리를 찾고있다. (사용 가능한 디스크 -공간).대용량 파일을 관리하기위한 빠른 'C'라이브러리

비하인드 스토리는 큰 파일을 작은 파일로 나눌 수 있습니다. 1GB이고 API에서 이러한 세부 사항을 처리하기를 원합니다.

데이터가 압축 된 바이너리 형식으로 PC에 도착하므로 하드 디스크에 기록하기 전에 더 이상 처리 할 필요가 없습니다.

라이브러리는 Windows 및 Linux에서 작동해야합니다.

+0

정말 적절한 대답은 아니지만 마음에 드는 첫 번째 것 :'nc -l | split' –

답변

1

데이터에 임의 액세스가 필요한 경우 메모리 매핑 파일을 살펴보십시오.

memeory를 명시 적으로 할당하고 데이터를 읽을 필요없이 파일 (또는 파일 섹션)을 memeory로 투명하게 매핑 할 수 있습니다. 그것은 Windows/Linux에서 작동합니다 (차이점을 감싸는 부스트 라이브러리가 있습니다).

Windows에서는 파일에 여러 개의 창을 사용하여 32 비트 OS에서 4GB 이상의 파일을 처리 할 수 ​​있습니다.

편집 : 죄송합니다. 800Mb/s !! 나는 그것을 극복 할 수있는 어떤 디스크도 모른다. 당신은 SSD 드라이브의 RAID 어레이를 훑어보아야합니다.
첨부 된 드라이브를 파일 시스템이없는 간단한 일련의 바이트로 사용하여 매우 빠른 지속 기록을 얻는 이미지 캡처 카드가있었습니다. 나는 그런 식으로 뭔가를 해야할지 모르겠다.

+0

800Mb/s는 약 80MB/s로 10000 RPM 드라이브에서 매우 유용합니다. WD Raptors는 150MB/s (약 1500Mb/s) 쓰기와 80MB/s 이상의 읽기 + 쓰기를 수행 할 수 있습니다. – slebetman

+0

임의 액세스가 필요하지 않습니다. 수신 된 (스트리밍 된) 데이터를 파일 끝으로 순차적으로 기록합니다. 파일이 작성되면 순차 읽기를 사용하여 사후 처리가 수행됩니다. –

0

궁극적 인 속도의 경우, 플랫폼 별 특성을 권장합니다.

목적은 입력 장치를 하드 드라이브에 직접 연결할 수있는 최대한 가까이가는 것입니다. 한 가지 방법은 하드 드라이브에 직접 쓰는 입력 장치 용 드라이버를 작성하는 것입니다.

일반적인 알고리즘은 매우 큰 원형 바이트 버퍼를 사용하거나 여러 버퍼를 사용하는 것입니다. 입력 장치와 출력 장치 사이의 속도 차이를 보완하기 위해 추가 공간이 필요합니다. 입력 장치가 논스톱 인 경우.

입력 장치를 일시 중지 할 수 있으면 문제가 더 쉽게됩니다.

관련 문제