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

标签 mongodb indexing position bioinformatics database

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

类似于:

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

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

一个 chrom ,位置对象?

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

填充字符串 ?

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

在 chrom 和位置上带有索引的自动生成的 ID?

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

其他 ?

???

感谢您的建议

皮埃尔

PS:(这个问题在 biostar 上交叉发布:http://biostar.stackexchange.com/questions/2519)

最佳答案

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

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

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

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

关于MongoDB:存储染色体/位置最有效的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740112/

相关文章:

mongodb - 在 mongodb 聚合中,查找前或查找后在哪里应用排序?

mongodb - 针对不同的排序过滤条件应该创建哪些MongoDB索引来提高性能?

python - 逻辑向量作为 Python 中的索引?

MySQL 查询缓慢或卡在发送数据上

Jquery 不适用于左上角的 css 位置?

php - 如何使用 PHP 7 的 MongoDB 驱动程序执行 drop()?

node.js - 异步函数中的错误处理

sql - 两列上的唯一索引是否意味着每列都有一个索引?

css - 相对于滚动区域的位置

html - 页脚在底部