3

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

就像是:

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

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

铬,位置对象?

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

4

1 回答 1

2

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

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

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

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

于 2010-09-19T01:27:54.577 回答