Насколько быстро можно искать по ObjectId в Mongodb?

Я ищу ObjectId везде, как будто это торт.

Это нормально? Поля _id должны просматриваться как сумасшедшие, верно?


person TIMEX    schedule 01.07.2011    source источник
comment
Конечно, этот вопрос имеет смысл только в том случае, если скорость поиска связана с каким-либо другим типом поиска, например индексом строкового поля, или индексом уникальной строки, или целочисленного поля, или неиндексированного поля?   -  person naught101    schedule 12.02.2021
comment
Связано: stackoverflow.com/questions/18680462/   -  person naught101    schedule 12.02.2021


Ответы (4)


_id — первичный ключ. Он проиндексирован. Конечно, это быстро.

person Karoly Horvath    schedule 01.07.2011
comment
Почему вы говорите «первичный» ключ? Я не верю, что в Mongo есть первичные и внешние ключи, только индексы. - person dman; 26.02.2016
comment
Технически, да. Из глоссария: Поле _id должно иметь уникальное значение. Вы можете думать о поле _id как о первичном ключе документа. - person Karoly Horvath; 26.02.2016

Более точный ответ: MongoDB использует индексы B-Tree. Поиск определенного значения в B-дереве имеет сложность O(log n) в среднем и наихудшем случае, что можно считать достаточно быстрым (то есть бинарный поиск). Однако это не постоянная сложность = O (1), поэтому у вас все еще могут быть некоторые эффекты замедления, если размер индекса становится больше, чем доступная оперативная память. (MongoDB старается хранить индексы в ОЗУ, и каждый ввод-вывод, необходимый для поиска индекса на диске, значительно замедляет ваш запрос).

person Mario    schedule 01.07.2011
comment
Нет ничего лучше постоянной сложности. Общая сложность O(1). Точка. - person Andreas Jung; 02.07.2011
comment
правда, после константы отсутствовало слово время. - person Mario; 02.07.2011

ObjectIds, если ваш основной метод доступа к данным, будет самым быстрым способом получить ваши данные из MongoDB. Мы используем нашу MongoDB в качестве репозитория с ключами для большей части нашего доступа к данным. У вас будут отличные результаты, делая то, что вы делаете.

person SethO    schedule 01.07.2011

Индекс в поле _id автоматически создается монго и первичным ключом по умолчанию. По скорости доступ к документам по полю _id будет очень быстрым.

Какие у вас есть опасения?

person kheya    schedule 01.07.2011