이 질문에 이미 답변하지 않았 으면 좋겠지 만 올바른 검색어를 찾을 수없는 것 같습니다.루비/파이썬의 로우 레벨 파일 처리
처음 몇 가지 배경 : 나는 표 형식의 텍스트 데이터 파일을 가지고 있으며 10GB로 쉽게 올라갈 수 있습니다. 컴퓨터를 처리하는 컴퓨터는 장치 처리 및 제어를 수행함에 따라 이미 긴 시간 동안의 데이터 수집 (최대 30-50MB/s)에서 많은 부하를 받고 있습니다. 따라서 디스크 공간과 액세스가 중요합니다. 공간 제약으로 인해 회전 디스크에서 SSD로 이동하지 않았습니다.
그러나 우리는 모든 데이터 포인트가 필요하지 않은 수집 된 데이터로 무엇인가를하려고합니다. 우리는 데이터를 줄이고 1000 번째 포인트를 모으기를 희망했습니다. 그러나 이러한 파일 (기가 바이트 각각)을로드하는 것은 라이브 수집 시스템을 방해 할 수 있으므로 받아 들일 수없는 디스크에 큰 부담을줍니다.
파일이 매우 잘 정의되어 있기 때문에 파일의 모든 n 번째 바이트 (또는 다른 방법)에 액세스 할 때 저수준 메서드를 사용할 수 있는지 궁금합니다 (두 개의 64 비트가 두 배로 각 행). 하드 드라이브가 조각화 될 수 있기 때문에 너무 낮은 수준의 액세스가 작동하지 않을 수 있음을 이해하지만 가장 좋은 방법/방법은 무엇입니까? 파이썬이나 루비의 솔루션을 선호하는데, 그 이유는 이것이 프로세싱이 수행 될 것이기 때문입니다. 이론적으로 R, C, 또는 Fortran에서도 작동 할 수 있습니다.
마지막으로 컴퓨터 또는 하드웨어 업그레이드는 옵션이 아니므로 시스템을 설정하는 데 수백 시간이 걸렸으므로 소프트웨어 변경 만 수행 할 수 있습니다. 그러나 장기 프로젝트가 될 수 있지만 텍스트 파일이 이러한 파일을 처리하는 가장 좋은 방법이 아닌 경우 다른 솔루션에도 사용할 수 있습니다.
EDIT : 우리는 50000 라인 (초)/초에서 500 만 라인/초까지 어디서든이 속도로 실행 가능하지 않습니다 (사용법에 따라 다름).
왜 데이터를 데이터베이스에 직접 수집하지 않습니까? – MattDMo
불행하게도 계측기 제어 및 수집 소프트웨어에는 엄청난 속도의 데이터베이스 인터페이스가 있습니다. 레코드를 만들려고하면 50ms가 걸리고 초당 5 백만 개의 레코드가 생성됩니다. 대용량 데이터 파일은 완료된 후에 BLOB에 저장할 수 있지만 데이터가 여러 시간 동안 실시간으로 수집되므로 문제가 해결되지 않습니다. – lswim
어떤 OS를 사용하고 있습니까? 이것은 매우 흥미로운 질문입니다. –