MongoDB: Какой самый эффективный способ сохранить хромосому / позицию - PullRequest
3 голосов
/ 18 сентября 2010

Я хочу сохранить некоторые позиции генома (хромосома, позиция), используя MongoDB.

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

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

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

a chrom, позиция объекта?

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

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

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

автоматически сгенерированный идентификатор с индексом chrom и position?

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

другое?

???

спасибо за ваши предложения

Pierre

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

1 Ответ

2 голосов
/ 19 сентября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...