跳过59GB fastq文件的前半部分来处理后半部分:逐行读取,还是fgetpos?

时间:2012-09-27 19:16:28

标签: c++ genome fgetpos large-data

我有2~59GB的“.fastq”格式的文本文件。 fastq文件是来自测序仪的基因组学读取文件。每4行是一个新读取,但行的大小可变。

文件大小约为59GB,并且大约有211M读取 - 这意味着,给予或接受大约211M * 4 = 844M行。我正在使用的程序Bowtie目前有能力执行以下选项:

“ - 跳过105M - 请到105M”

这实际上意味着“跳过前105M读取,只处理下一次105M读取”。通过这种方式,您可以分解文件的处理。问题是,它跳过的方式非常慢。它只是读取正常情况下的第一个105M读取,但不处理它们。然后,一旦达到给定的读取值,它就会开始比较。

我想知道我是否可以使用类似C / C ++的fsetpos来将位置设置到文件的中间[或者任何地方]我意识到它可能会把我放在一条线的中间位置,然后从那里找到第一次完全读取的开始,开始处理而不是等待它读取大约422M行,直到它到达需要的位置。有没有人在这么大的文件上做fsetpos的经验,并且知道性能是否比现在的表现更好?

Thanks-- 尼克

1 个答案:

答案 0 :(得分:0)

是的,您可以使用C ++定位到文件的中间位置。

对于大文件,性能通常比读取数据更好。

通常,在文件中定位的过程:

  1. 请求读取文件的目录条目。
  2. 搜索目录以查找文件的轨道和扇区 位置。
  3. 注意:某些文件系统可能具有较大的目录扩展名 文件,因此需要读取更多数据。
  4. 在下一次阅读时,硬盘被告知要转到给定的轨道 和扇区,然后读入数据。
  5. 您将节省所有先前数据的时间,以便通过通信端口进入内存(或忽略)。