При создании базы данных в первый раз может потребоваться некоторое время. В следующий раз, если вы не удаляете созданный index_filename
, он должен идти быстрее.
Допустим, у вас есть 25 файлов с некоторыми генами. Этот метод создает SQLite DB, который помогает находить последовательности между файлами, такие как «Get me the gene XXX», а SQLite/index_db знает, что ген находится в файле 12.fasta
и его точном расположении внутри файла. Поэтому Biopython открывает файл и быстро сканирует положение гена.
Без этого index_db вам необходимо загрузить каждую запись в память, которая быстрая, но некоторые файлы могут не вписываться в ОЗУ.
Если вы хотите скорость выборки регионов вы можете использовать FastaFile from pysam и samtools. Как это:
Вы должны индексировать все FASTA файлы с faidx
:
$ samtools faidx big_fasta.fas
из кода написать что-то вроде этого:
from pysam import FastaFile
rec = FastaFile("big_fasta.fas") # big_fasta.fas.fai must exist.
seq = rec.fetch(reference=gene_name, start=1000, end= 1200)
print(s)
В моем компьютере это на 2 порядка быстрее, чем Biopython для одной и той же операции, но вы получаете только чистую секцию основания баз.
Правильный метод для чего? Если вы используете только «index_db», чтобы получить одну последовательность, вы не используете ее правильно. – xbello
@xbello Извините, мое плохое. Правильный метод индексирования файлов последовательностей. У меня около 25 файлов, каждый из которых представляет ген, и я должен получить определенное место в последовательности определенного файла. – Thefirefilou