2010-09-18 6 views
3

Я хочу хранить некоторые геномные положения (хромосому, положение) с помощью MongoDB.MongoDB: Какой самый эффективный способ хранения хромосомы/положения

что-то вроде:

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

Я хочу, чтобы иметь возможность быстро найти все записи в данном сегменте (хром, [posStart - posEnd]). Что будет самым лучшим ключ/_id для использования?

a хром, позиция объекта?

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

проложенная строка?

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

автоматически сгенерированный идентификатор с индексом на хромового и позиции?

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

другой?

??? 

спасибо за ваше предложение (ы)

Пьер

PS: (этот вопрос был крест размещен на Biostar: http://biostar.stackexchange.com/questions/2519)

+0

Я разместил контрольный показатель в своем блоге: http://plindenbaum.blogspot.com/2010/09/indexing-some-genomic-positions-with.html – Pierre

ответ

2

Я считаю индекс две колонки будет предлагать самый быстрый путь доступа, поскольку он будет самым компактным индексом.

Однако он будет дополнительным индексом (поскольку у вас уже есть индекс _id, который вы не используете), поэтому первые два варианта хороши тем, что они устраняют дополнительный индекс.

Проложенная строка короче, чем решение сложного объекта, более короткое означает меньше использования памяти, следовательно, быстрее сканирование. Я бы пошел только на сложный объект, если сплющивание/отступы невозможно. Кроме того, поскольку ключи комплексного объекта должны быть закодированы в индекс (не в случае с другими индексами), выберите более короткие имена ключей (c и p).

Итак, я бы пошел для индекса с двумя столбцами (если вы не против «растрачивания» индекса id) или заполненной строки. Вы даже можете пойти с добавлением двоичного кода (сохранение нескольких байтов при кодировании целого числа), но это, вероятно, не стоит хлопот.

+0

спасибо, я собираюсь проверить этот интересный ответ. – Pierre