많은 작은 데이터 파일을 루비의 대형 데이터 파일로 마이그레이션 할 때주의해야 할 점은 무엇입니까?많은 작은 데이터 파일을 루비의 몇 가지 큰 파일로 마이그레이션하기
배경 : : 저는 차세대 시퀀싱 데이터를 처리하는 생물 정보 과학자로서, 실행 당 약 백만 개의 시퀀스를 생성합니다. 이전에 수백만 개 시퀀스 중 하나를 자체 파일에 저장하고 각 시퀀스에 대해 몇 가지 처리 단계를 수행하여 각 시퀀스에 대해 몇 개의 파일을 생성했습니다. 불행히도 2 천만 개의 파일을 갖는 것은 파일 입력 및 출력에 주요 병목 현상을 일으키고 백업을 느리게 만듭니다. (수백만 개의 파일을 가지고있는 것이 또한 answers to this question이 아닙니다.)
각 파일을 저장할 때 sqlite를 사용하는 것이 좋겠지 만 가능하면이 옵션을 사용하지 말고 종속성을 추가하지 않으려합니다.
대용량 파일을 처리하기위한 하나의 모듈을 작성하고, 입력 또는 출력을 원할 때마다 (독립 프로세스로 실행되는) 모든 처리 스크립트가이 모듈을 사용하도록해야한다고 생각합니다. StringIO로 만든 파일 스트림을 처리 클래스에 제공하면 대용량 파일의 작동 방식을 알 필요가 없으므로 유용합니다.
입력을받을 때 큰 파일 전체를 읽지 않아도되도록 (각 시퀀스를 독립적 인 프로세스로 처리하여 한 시퀀스의 분석이 다른 시퀀스의 분석을 손상시키지 않도록하기 위해) 큰 입력 파일에서 내가 어디에 있는지 추적해야합니다. 보다 정교한 프로세스 간 통신 기술이 있지만 임시 파일을 사용하여 IO # seek의 문자 위치를 저장할 수도 있습니다.
같은 파일에 쓰는 경우 여러 프로세스를 동시에 실행할 수 없으며 큰 파일 처리기에서 출력을 정기적으로 플러시해야한다는 점도 기억해야합니다. .