2010-09-18 37 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

相關問題