加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用Django和MySQL存储和查找大型DNA微阵列结果

发布时间:2020-12-20 13:22:20 所属栏目:Python 来源:网络整理
导读:我正在尝试设置一个 django应用程序,它允许我存储和查找dna微阵列的结果,其中包含~50万个独特探针,适用于大量受试者. 我一直在玩的模型设置如下: class Subject(models.Model): name = models.CharField()class Chip(models.Model): chip_name = models.Cha
我正在尝试设置一个 django应用程序,它允许我存储和查找dna微阵列的结果,其中包含~50万个独特探针,适用于大量受试者.

我一直在玩的模型设置如下:

class Subject(models.Model):
    name = models.CharField()

class Chip(models.Model):
    chip_name = models.Charfield()

class Probe(models.Model):
    chips = models.ManyToManyField(Chip,related_name="probes" )
    rs_name = models.CharField(unique=True)
    chromosome = models.IntegerField()
    location = models.IntegerField()

class Genotype(models.Model):
    probe = models.ForeignKey(Probe,related_name='genotypes')
    subject = models.ForeignKey(Subject,related_name='genotypes')
    genotype = models.CharField()

我想知道是否有更好的方法来设置它?我只是想,对于每个主题,我将在Genotype表中创建500k行.

如果我使用MySQL数据库,它是否能够处理大量的主题,每个主题添加500k行到该表?

解决方法

好吧,如果每个探针需要每个探针的结果(基因型),那么标准的多对多中间表(基因型)确实会变得非常大.
拥有1000个主题,您将拥有5亿条记录.

如果您可以在一列或多列中保存基因型字段编码/序列化的值,那将大大减少记录量.保存在单个列中编码的500k结果将是一个问题,但如果您可以将它们分组,则应该可行.这会将记录数量减少到nr.主题或者另一种可能是Probe-s在ProbeGroup-s中分组并具有nr. ProbeResults = nr.主题* nr. ProbeGroup.
第一个选项是:

class SubjectProbeResults(models.Model):
    subject = models.ForeignKey(Subject,related_name='probe_results')
    pg_a_genotypes = models.TextField()
    ..
    pg_n_genotypes = models.TextField()

这当然会使搜索/过滤结果变得更加困难,但如果保存的格式很简单,则不应该太难.
您可以在基因型列中使用以下格式:“probe1_id | genotype1,probe2_id | genotype2,probe3_id | genotype3,…”

检索特定基因型探针的主题查询集.

一个.确定探针属于哪个组
??即“C组” – > pg_c_genotypes

湾查询probe_id基因型组合的相应列.

from django.db.models import Q

qstring = "%s|%s" % (probe_id,genotype)

subjects = Subject.objects.filter(Q(probe_results__pg_c_genotypes__contains=',%s,' % qstring) | 
                               Q(probe_results__pg_c_genotypes__startswith='%s,' % qstring) | 
                               Q(probe_results__pg_c_genotypes__endswith=',%s' % qstring))

我提到的另一个选项是也有ProbeGroup模型,每个Probe都有一个到ProbeGroup的ForeignKey.然后:

class SubjectProbeResults(models.Model):
    subject = models.ForeignKey(Subject,related_name='probe_results')
    probe_group = models.ForeignKey(ProbeGroup,related_name='probe_results')
    genotypes = models.TextField()

您可以查询相同的基因型字段,但现在您可以直接查询该组,而不是确定您需要搜索的列.这样,如果你有前任.每组1000个探针 – > 500组.然后对于1000名受试者,你将拥有500K的SubjectProbeResults,仍然很多,但肯定比500M更易于管理.但是你可以拥有更少的团队,你必须测试最有效的团队.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读