MongoDB:存储染色体/位置的最有效方法是什么

时间:2010-09-18 02:15:23

标签: mongodb indexing position bioinformatics database

我想使用MongoDB存储一些基因组位置(染色体,位置)。

类似的东西:

{
chrom:"chr2",
position:100,
name:"rs25"
}

我希望能够快速找到给定段中的所有记录(chrom,[posStart - posEnd])。什么是最好的 key / _id

a chrom,position object?

db.snps.save({_id:{chrom:"chr2",position:100},name:"rs25"})

填充字符串?

db.snps.save({_id:"chr02:00000000100",chrom:"chr2",position:100,name:"rs25"})

自动生成的id,其中包含chrom和position的索引?

db.snps.save({chrom:"chr2",position:100,name:"rs25"})

其他?

???

感谢您的建议

皮尔

PS:(此问题已在biostar上发布:http://biostar.stackexchange.com/questions/2519

1 个答案:

答案 0 :(得分:2)

我相信双列索引将提供最快的访问路径,因为它将是最紧凑的索引。

然而,它将是一个额外的索引(因为你已经有了_id索引,你没有使用它),所以前两个选项很好,因为它们消除了额外的索引。

填充字符串比复杂对象解决方案短,缩短意味着更少的内存使用,因此扫描速度更快。如果无法进行展平/填充,我只会选择复杂的对象。 此外,由于复杂对象键需要编码到索引中(与其他索引不同),请选择较短的键名(c和p)。

所以,我会选择两列索引(如果你不介意“浪费”id索引)或填充字符串。你甚至可以使用填充二进制文件(在编码整数时节省几个字节),但这可能不值得麻烦。