我在一个生物实验室工作,我必须设计一个数据库来存储许多 DNA 微阵列实验结果。
每个实验由许多微阵列(平均约十个)组成,每个微阵列包含超过 500 万个探针。每个探针都映射到一个特定的基因 id,当然,在所有实验中,相同的探针匹配相同的基因 ID。目的是存储每个微阵列的强度值,以便能够在特定实验中快速检索特定基因 id 的探针的强度值。
事实上,一个简单的 mysql 表就足够了,它看起来像这样:
强度表:|probe_id|experiment_id|microarray_id|gene_id|intensity_value
主键由(probe_id、experiment_id、microarray_id、gene_id)组成
问题是:每个实验都有许多微阵列,其中有超过 500 万个探针。1000 次实验,平均 10 个微阵列(这是一个低估计,有些有数百个),它的 1000 * 10 * 5M = 500 亿行。我想它会很慢。而且我完全不知道如何处理数十亿行的 mysql 表。那可能吗 ?有小费吗 ?
我也对 noSQL 数据库很好奇。我从未使用过 cassandra,但在我看来它非常适合这项任务,对吗?我可以想象这样的shema:
{
experiment_id_1:{ <- thats a super collumnFamilly ?
gene_id_1:{ <- thats a collumnFamilly ?
probe_id_1:{ value_microarray_1, value_microarray_2, ... }, <- thats a superCollumn ?
probe_id_2:{ value_microarray_1, value_microarray_2, ... },
probe_id_3:{ value_microarray_1, value_microarray_2, ... },
...
},
gene_id_2:{
probe_id_1:{ value_microarray_1, value_microarray_2, ... },
probe_id_2:{ value_microarray_1, value_microarray_2, ... },
probe_id_3:{ value_microarray_1, value_microarray_2, ... },
...
}
}
experiment_id_2{
...
}
...
}
我说得对吗?它适合 cassandra 模型吗?会有效吗?你怎么看noSQL大师:)
谢谢。