使用Django和MySQL存储和查找大型DNA微阵列结果
我正在尝试设置一个
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() 这当然会使搜索/过滤结果变得更加困难,但如果保存的格式很简单,则不应该太难. 检索特定基因型探针的主题查询集. 一个.确定探针属于哪个组 湾查询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更易于管理.但是你可以拥有更少的团队,你必须测试最有效的团队. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |