作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 sql 数据库,其中包含基因组、染色体和“有趣”区域(BED 格式)。基因组(例如 4GB)由 +/- 20 条染色体组成,因此每个字符串大约有 200MB 大。例如,基因组中的染色体由字符串组成:
NNNNATCCAGGAGAATTACAT...ACCGGGAATTCCCGGNNNNN # 200 MB large
假设我有大约 1.000.000 个区域 ATAC-seq 峰值,我想获取仅 3 号染色体的 100 bp 的序列。我的 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(ite) 中是否可以进行快速查找,因为当前的解决方案对我来说有点特殊。
最佳答案
您可以将基因组字符串分成多个部分,并使用多处理同时搜索子字符串,以最大程度地减少单个处理器的使用并更快地获得结果。
import sys
import multiprocessing
from multiprocessing import Pool
def SplitGenomeString(start,length):
#where con in sqlconnection to database using as global variable
cursorObj = con.cursor()
cursorObj.execute('SELECT substr(Chr.Sequence,{},{}) FROM Chromosome
Chr'.format(str(start),str(length))
return cursorObj.fetchall()
def getSubSequence(s):
#Write your Queries according to your requirements for finding subsequence s
if __name__ == '__main__':
length = SplitGenomeString(0,sys.maxint)
cores = multiprocessing.cpu_count()
#asumming the subsequence you want to check is 100
subseq_len = 100
for i in range(0,length,round(length/cores)):
ls.append(SplitGenomeString(i,round(length/cores)))
#this will also include the excluded parts because of splitting geneome string
temp = []
for i in range(len(ls) - 1):
temp.append(ls[i][1 - subseq_len):] + ls[i+1][:subseq_len - 1])
ls = ls + temp
with Pool(cores) as p:
p.map(getSubSequence,ls)
您可以在此链接中查看有关多处理的信息: https://docs.python.org/3/library/multiprocessing.html
已按告知进行编辑
关于python - SQL(ite)快速检索较大字符串(基因组)的多个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59609641/
我有一个 sql 数据库,其中包含基因组、染色体和“有趣”区域(BED 格式)。基因组(例如 4GB)由 +/- 20 条染色体组成,因此每个字符串大约有 200MB 大。例如,基因组中的染色体由字符
我是一名优秀的程序员,十分优秀!