【发布时间】:2012-09-19 15:54:39
【问题描述】:
我有 2 ~59GB 的“.fastq”格式的文本文件。 fastq 文件是从测序仪读取的基因组学文件。每 4 行是一个新的读取,但这些行的大小是可变的。
文件大小大约为 59GB,大约有 211M 读取——这意味着,给或取,大约 211M*4 = 844M 行。我正在使用的程序 Bowtie 目前能够执行以下选项:
"--skip 105M --qupto 105M"
这实质上意味着“跳过前 105M 读取,只处理下一个 105M 读取。”通过这种方式,您可以分解文件的处理。问题是,它跳过的方式非常慢。它只是像往常一样读取前 105M 读取,但不处理它们。然后,一旦达到给出的读取值,它就会开始比较。
我想知道是否可以使用 C/C++ 的 fsetpos 之类的东西将位置设置为文件的中间[或任何地方],我意识到这可能会将我放在一行中间的某个位置,然后从那里找到第一次完整读取开始处理,而不是等待它读取大约 422M 行,直到它到达它需要去的地方。有没有人有在如此大的文件上执行 fsetpos 的经验,并且知道性能是否比目前的执行方式更好?
谢谢-- 尼克
【问题讨论】:
-
你怎么知道你在哪条线上?打开一本随机书,在其中一页上找到任意字母。那封信之前有多少个句子?
-
你能不能用一些东西来将文件预处理成多个文件,一次通过这样做?不确定它会有多大帮助,但如果你有超过 2 个块,它会节省额外的重复阅读跳过的行。
-
你为什么不试试看它是如何工作的?
-
fastq 文件的本质是每四行 sn-p/read 都有一个格式,可以让我弄清楚我在哪里。换句话说,这就像打开一本书,在其中一页上随机任意字母,然后备份直到到达句子的开头,只有在 fastq 文件的情况下,读取是有编号的。因此,如果书中的每个句子都以“+ [3220243]”或表示该句子编号的内容开头。
标签: c++ genome fgetpos large-data