代码之家  ›  专栏  ›  技术社区  ›  Pierre

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

  •  3
  • Pierre  · 技术社区  · 15 年前

    我想用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"})
    

    在chrom和position上有索引的自动生成的id?

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

    其他?

    ???
    

    谢谢你的建议

    彼埃尔

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Thilo    15 年前

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

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

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

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