2010-09-18 38 views
3

我想存储一些使用MongoDB的基因组位置(染色体,位置)。MongoDB:什么是最有效的方式来存储染色体/位置

类似:

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

我希望能够迅速找到在给定段中所有的记录(CHROM,[posStart - posEnd])。什么是最好的键/ _id被使用?

一个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和位置的索引?

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

其他?

??? 

感谢你的建议(S)

皮埃尔

PS:(这个问题是跨张贴在映泰:http://biostar.stackexchange.com/questions/2519

+0

我在我的博客上发布了一个基准:http://plindenbaum.blogspot.com/2010/09/indexing-some-genomic-positions-with.html – Pierre 2010-09-19 19:45:32

回答

2

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

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

填充字符串比复杂对象解决方案短,意味着更短意味着更少的内存使用,从而加快扫描速度。我只会去复杂的对象,如果flattening /填充是不可能的。 此外,由于复杂的对象键需要编码到索引中(而不是其他索引的情况),所以选择较短的键名称(c和p)。所以,我会去寻找两列索引(如果你不介意“浪费”id索引)或填充字符串。你甚至可以去填充二进制文件(在编码整数时节省几个字节),但这可能不值得这样麻烦。

+0

谢谢,我要验证这个有趣的答案。 – Pierre 2010-09-19 18:46:48

相关问题