пропустить первую половину 59-гигабайтного файла fastq для обработки последней половины: читать построчно или fgetpos?

У меня есть 2 ~ 59 ГБ текстовых файлов в формате .fastq. Файлы fastq являются геномными файлами чтения из секвенсора. Каждые 4 строки — это новое чтение, но строки имеют переменный размер.

Размер файла составляет примерно 59 ГБ, и число операций чтения составляет около 211 МБ, что означает, приблизительно, 211 М * 4 = 844 М строк. Программа, которую я использую, Bowtie, в настоящее время может выполнять следующие функции:

«—skip 105M —qupto 105M»

что по сути означает «пропустить первые чтения 105M и обрабатывать только до следующих 105M чтений». Таким образом, вы можете прервать обработку файла. Проблема в том, что способ пропуска невероятно медленный. Он просто читает первые 105M, как обычно, но не обрабатывает их. Затем он начинает сравнение, как только достигает значения чтения, которое ему было дано.

Мне интересно, могу ли я использовать что-то вроде fsetpos в C / C ++, чтобы установить позицию в середине файла [или где-то еще], что, как я понимаю, вероятно, поместит меня где-то в середину строки, а затем оттуда найдет начало первое полное чтение, чтобы начать обработку, а не ждать, пока он прочитает приблизительно 422 млн строк, пока не доберется до нужного места. Есть ли у кого-нибудь опыт работы с fsetpos для такого большого файла, и он знает, лучше ли производительность, чем сейчас, как сейчас?

Спасибо—
Ник

0

Решение

Да, вы можете расположить середину файла, используя C ++.

Для больших файлов производительность обычно лучше, чем чтение данных.

В общем, процесс позиционирования в файле:

  1. Запрос сделан, чтобы прочитать запись каталога для файла.
  2. В каталоге выполняется поиск дорожки и сектора для файла.
    позиция.
  3. Примечание: некоторые файловые системы могут иметь расширения каталога для больших
    файлы, таким образом, больше данных нужно будет прочитать.
  4. При следующем чтении жесткому диску говорят перейти на заданную дорожку
    и сектор, затем прочитайте данные.

Вы экономите время из всех предыдущих данных, чтобы пройти через коммуникационный порт и в память (или игнорируется).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]