2012-09-27 3 views
0

2 ~ 59GB의 텍스트 파일을 ".fastq"형식으로 가지고 있습니다. fastq 파일은 시퀀서에서 genomics 읽기 파일입니다. 매 4 라인마다 새로운 읽기가되지만 라인은 가변적입니다.59GB fastq 파일의 첫 번째 절반을 건너 뛰고 마지막 절반을 처리합니다. 줄 단위 또는 fgetpos를 읽으시겠습니까?

파일 크기는 약 59GB이며 약 211M의 읽기가 가능합니다. 즉, 211M * 4 = 844M 라인을 나타냅니다.

"105M --qupto 105M --skip"본질적으로 첫 105M를 건너 "를 의미

읽고 만 처리 최대 : 내가 사용 프로그램, 나비 넥타이는 현재 다음과 같은 옵션을 할 수있는 능력을 가지고 다음 105M 읽습니다. " 이 방법으로 파일 처리를 분리 할 수 ​​있습니다. 문제는 건너 뛰는 방식이 매우 느립니다. 평소대로 105M 읽기를 읽지 만 처리하지는 않습니다. 그런 다음 주어진 읽기 값에 도달하면 비교를 시작합니다.

C/C++의 fsetpos와 같은 것을 사용하여 파일의 중간에 위치를 설정하거나 [어딘가에서] 어딘가에서 나를 어딘가에 놓을 지 궁금합니다. 처리가 시작되기까지 약 422M 라인을 읽을 때까지 기다리지 않고 첫 번째 전체 읽기의 시작 부분을 찾으십시오. 누구든지 그러한 큰 파일에서 fsetpos를 사용하여 경험을 쌓았는지, 성능이 현재보다 더 좋은지 여부를 알고 있습니까? 닉

+2

어떤 라인을 사용했는지 어떻게 알 수 있습니까? 임의의 책을 열고 페이지 중 하나에서 임의의 글자를 찾습니다. 그 편지 앞에 얼마나 많은 문장이 있습니까? – Joe

+0

한 번에 그렇게함으로써 파일을 여러 파일로 사전 처리하는 대신 무언가를 사용할 수 있습니까? 얼마나 도움이 될지 모르지만 두 개 이상의 청크가 있으면 건너 뛴 줄을 두 번 읽지 않아도됩니다. – Joe

+0

왜 그냥 해보고 작동하는지 보지 않겠습니까? –

답변

0

Thanks-- 예, 당신은 C++을 사용하여 파일의 중간에 배치 할 수 있습니다.

거대한 파일의 경우 일반적으로 데이터를 읽는 것보다 성능이 좋습니다. 일반적으로

, 파일 내에서의 위치에 대한 프로세스 :

  1. 요청이 파일에 대한 디렉토리 항목을 읽으려고한다.
  2. 위치에 대한 트랙과 섹터를 찾으려면 디렉토리가 검색됩니다.
  3. 참고 : 일부 파일 시스템에는 개의 큰 파일에 대한 디렉토리 확장자가있을 수 있으므로 더 많은 데이터를 읽어야합니다.
  4. 다음에 하드 드라이브가 지정된 트랙 과 섹터로 이동 한 다음 데이터를 읽으라는 메시지가 표시됩니다.

이전의 모든 데이터가 통신 포트를 통해 메모리로 전달되거나 무시되는 시간을 절약 할 수 있습니다.

+0

OK - 좋습니다. [나는 NFS를 통해서도 이것을하고 있지만 순차적 인 라인을 읽는 것보다 더 빠르다.] fgetpos()를 사용할 때 근본적으로 무엇이 일어 났는가? 나는 "파일 리눅스 내의 위치"를 google 할 것이다. 감사. – HodorTheCoder

+0

@NickLindberg : 좋다고 생각되면 옆에있는 체크 표시를 클릭하십시오. :-) –

+0

전화하세요. 방법론의 예를 제공 할 수 있습니까? 내 생각에 이상적인 시나리오에서 어떻게 작동하는지 궁금하지 않았다. (당신이 묘사 한대로 동작 할 것이라고 생각했다는 뜻이다.) 예제 코드 스 니펫이나 라이브러리/시스템 호출은 내가 원했던 것과 비슷하다. fgetpos() 내가 어디로 향하고 있는지는 모르겠지만 위와 같은 방식으로 동작하는지 완전히 확신 할 수는 없습니다. – HodorTheCoder

관련 문제