3

MongoDBを使用していくつかのゲノム位置(染色体、位置)を保存したいと思います。

何かのようなもの:

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

特定のセグメント(chrom、[posStart --posEnd])内のすべてのレコードをすばやく見つけられるようにしたい。使用するのに最適なkey/_idは何ですか?

クロム、位置オブジェクト?

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

パッド入りの文字列?

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

クロムと位置のインデックスを持つ自動生成されたID?

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

他の ?

???

あなたの提案に感謝します

ピエール

PS :(この質問はbiostarにクロスポストされました:http://biostar.stackexchange.com/questions/2519

4

1 に答える 1

2

2列のインデックスは、最もコンパクトなインデックスになるため、最速のアクセスパスを提供すると思います。

ただし、これは追加のインデックスになるため(使用していない_idインデックスが既にあるため)、最初の2つのオプションは、余分なインデックスを排除するという点で優れています。

パディングされた文字列は、複雑なオブジェクトソリューションよりも短く、メモリの使用量が少ないため、スキャンが高速になります。平坦化/パディングが不可能な場合は、複雑なオブジェクトのみを選択します。また、複雑なオブジェクトキーはインデックスにエンコードする必要があるため(他のインデックスの場合はそうではありません)、短いキー名(cおよびp)を選択します。

したがって、2列のインデックス(idインデックスを「無駄にする」ことを気にしない場合)または埋め込み文字列を使用します。埋め込みバイナリ(整数のエンコードで数バイトを節約)を使用することもできますが、それはおそらく面倒な価値はありません。

于 2010-09-19T01:27:54.577 に答える