0

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

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

“--跳过 105M --qupto 105M”

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

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

谢谢——尼克

4

1 回答 1

0

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

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

一般来说,在文件中定位的过程:

  1. 请求读取文件的目录条目。
  2. 搜索目录以找到文件位置的轨道和扇区。
  3. 注意:某些文件系统可能具有大文件的目录扩展名,因此需要读取更多数据。
  4. 在下一次读取时,告诉硬盘驱动器转到给定的磁道和扇区,然后读入数据。

您正在节省所有先前数据通过通信端口进入内存(或被忽略)的时间。

于 2012-09-27T19:47:11.223 回答