2009-11-24 7 views
2

많은 작은 데이터 파일을 루비의 대형 데이터 파일로 마이그레이션 할 때주의해야 할 점은 무엇입니까?많은 작은 데이터 파일을 루비의 몇 가지 큰 파일로 마이그레이션하기

배경 : : 저는 차세대 시퀀싱 데이터를 처리하는 생물 정보 과학자로서, 실행 당 약 백만 개의 시퀀스를 생성합니다. 이전에 수백만 개 시퀀스 중 하나를 자체 파일에 저장하고 각 시퀀스에 대해 몇 가지 처리 단계를 수행하여 각 시퀀스에 대해 몇 개의 파일을 생성했습니다. 불행히도 2 천만 개의 파일을 갖는 것은 파일 입력 및 출력에 주요 병목 현상을 일으키고 백업을 느리게 만듭니다. (수백만 개의 파일을 가지고있는 것이 또한 answers to this question이 아닙니다.)

각 파일을 저장할 때 sqlite를 사용하는 것이 좋겠지 만 가능하면이 옵션을 사용하지 말고 종속성을 추가하지 않으려합니다.

대용량 파일을 처리하기위한 하나의 모듈을 작성하고, 입력 또는 출력을 원할 때마다 (독립 프로세스로 실행되는) 모든 처리 스크립트가이 모듈을 사용하도록해야한다고 생각합니다. StringIO로 만든 파일 스트림을 처리 클래스에 제공하면 대용량 파일의 작동 방식을 알 필요가 없으므로 유용합니다.

입력을받을 때 큰 파일 전체를 읽지 않아도되도록 (각 시퀀스를 독립적 인 프로세스로 처리하여 한 시퀀스의 분석이 다른 시퀀스의 분석을 손상시키지 않도록하기 위해) 큰 입력 파일에서 내가 어디에 있는지 추적해야합니다. 보다 정교한 프로세스 간 통신 기술이 있지만 임시 파일을 사용하여 IO # seek의 문자 위치를 저장할 수도 있습니다.

같은 파일에 쓰는 경우 여러 프로세스를 동시에 실행할 수 없으며 큰 파일 처리기에서 출력을 정기적으로 플러시해야한다는 점도 기억해야합니다. .

답변

0

"파일 묶음"을 저장하는 경우 일 뿐이므로 BDB와 같은 간단한 키/값 저장소가 필요합니다. MySQL, SQLite 또는 키/값을 포함한 모든 RDBMS로 쉽게 확장 할 수 있습니다 도쿄 내각과 같은 가게.

SQLite에 대한 모든 이유가 있습니다. 견고한 데이터 저장 메커니즘은 '파일 더미'시스템에 훨씬 더 나은 접근 방법 일 수 있습니다.

1

귀하의 상황에 대해 자세히 알지 못하지만, 귀하가 묘사하고있는 응용 프로그램 - 나는 백만 가지를 저장하려고합니다. 신속하고 유연하게 액세스하고 싶습니다. DB에 들리는 것 같습니다. sqlite와 같은 도구를 피함으로써 반드시 의존성을 피할 필요가 없습니다. 당신은 다른 것에 대한 의존성의 한 종류를 거래했을 것입니다.

파일 기반 솔루션을 롤업해야하는 경우 반드시 한 극단에서 다른 극단으로 이동할 필요는 없습니다. 10 개의 하위 디렉토리에 분산되어있는 1000 개의 중간 크기 파일은 어떻습니까? 그리고 중간 크기의 파일은 .tar 아카이브 또는 비슷한 코드 (디렉토리가 위장 된 디렉토리) 일 수 있습니다. 이는 코드의 관점에서 볼 때 여러분이 사용하는 1 백만 개의 작은 파일과 매우 유사하게 동작 할 수 있습니다. 또한 파일 .tar은 특별한 소프트웨어 없이도 명령 행에서 직접 액세스 할 수 있습니다.

미친 아이디어 일 수도 있지만, DB를 피하고 더 빠르고 실용적인 방법을 함께 사용한다면 자신의 DB 시스템과 도덕적으로 동일한 것을 만들 필요가없는 옵션을 고려하십시오.

관련 문제