У меня есть база данных sql, состоящая из генома, его хромосом и " интересных " областей (в формате BED). Геном (например, 4 ГБ) состоит из +/- 20 хромосом, поэтому каждая строка имеет размер около 200 МБ. Например, хромосома в геноме состоит из строки:
NNNNATCCAGGAGAATTACAT...ACCGGGAATTCCCGGNNNNN # 200 MB large
Допустим, у меня есть около 1.000.000 областей пиков ATA C -seq, и я хотел бы получить только последовательности из 100 п.н. хромосома 3. Мой запрос SQL будет выглядеть следующим образом:
SELECT substr(Chr.Sequence, Bed.ChromStart + Bed.Peak - 50, 100) FROM Bed Bed
INNER JOIN Chromosome Chr ON Bed.ChromosomeId = Chr.ChromosomeId
WHERE Chr.Chromosome = 'chr3'
Проблема с такого рода поисками заключается в том, что Chr.Sequence
загружается для каждого отдельного удара, что делает использование оперативной памяти чрезмерно большим, и поиск действительно медленный. Я «исправил» это, используя только базу данных SQL для хранения позиций интересных мест, а затем используя pyfaidx
, чтобы быстро получить соответствующие последовательности из хромосомы.
Мне интересно, возможен ли быстрый поиск в SQL (ите), поскольку текущее решение кажется мне немного случайным c.