У меня есть 2 ~ 59 ГБ текстовых файлов в формате .fastq. Файлы fastq являются геномными файлами чтения из секвенсора. Каждые 4 строки — это новое чтение, но строки имеют переменный размер.
Размер файла составляет примерно 59 ГБ, и число операций чтения составляет около 211 МБ, что означает, приблизительно, 211 М * 4 = 844 М строк. Программа, которую я использую, Bowtie, в настоящее время может выполнять следующие функции:
«—skip 105M —qupto 105M»
что по сути означает «пропустить первые чтения 105M и обрабатывать только до следующих 105M чтений». Таким образом, вы можете прервать обработку файла. Проблема в том, что способ пропуска невероятно медленный. Он просто читает первые 105M, как обычно, но не обрабатывает их. Затем он начинает сравнение, как только достигает значения чтения, которое ему было дано.
Мне интересно, могу ли я использовать что-то вроде fsetpos в C / C ++, чтобы установить позицию в середине файла [или где-то еще], что, как я понимаю, вероятно, поместит меня где-то в середину строки, а затем оттуда найдет начало первое полное чтение, чтобы начать обработку, а не ждать, пока он прочитает приблизительно 422 млн строк, пока не доберется до нужного места. Есть ли у кого-нибудь опыт работы с fsetpos для такого большого файла, и он знает, лучше ли производительность, чем сейчас, как сейчас?
Спасибо—
Ник
Да, вы можете расположить середину файла, используя C ++.
Для больших файлов производительность обычно лучше, чем чтение данных.
В общем, процесс позиционирования в файле:
Вы экономите время из всех предыдущих данных, чтобы пройти через коммуникационный порт и в память (или игнорируется).
Других решений пока нет …