Подтвердить что ты не робот

Разница между createIndex() и makeIndex() в java с использованием mongodb

В чем разница между createIndex() и ensureIndex() в Java с использованием MongoDB? Я искал это в Google, но не получил удовлетворительного ответа.

4b9b3361

Ответ 1

Обновление 2: Первоначальный ответ, а также первое обновление ошибочно ссылаются на документацию оболочки Mongo вместо Java API.

В Java DBCollection.ensureIndex() устарел в версии 2.12 и удален в версии 3.0. DBCollection.createIndex() - это тот, который следует использовать.

Update:
db.collection.ensureIndex() устарел с версии 3.0.0.
Теперь является псевдонимом для db.collection.createIndex().

Оригинал:
createIndex() устарел с версии 1.8

Он использовался для создания индексов в коллекциях, тогда как ensureIndex() создает индекс в указанном поле , если индекс еще не существует. Более того, когда мы выполняем createIndex() дважды, второе выполнение будет выходить из строя, тогда как с ensureIndex() вы можете вызывать его несколько раз и не будет

И еще одно, что они изменили в отношении поведения ensureIndex() в предыдущих версиях mongodb (версии менее 2.6), если запись индекса для существующего документа превышает максимальную длину ключа ключа, будет создан индекс , но Mongodb не индексировал такие документы, тогда как в последней версии индекс не будет создан.

Ответ 2

В Java API DBCollection.ensureIndex() устарел , точно так же, как и обычный "MongoDB API" (во время ответа). Обновить. Эта несогласованность, по-видимому, была разрешена, и теперь db.collection.createIndex() заменяет db.collection.ensureIndex() в оболочке Mongo.

Как вы можете видеть в https://jira.mongodb.org/browse/JAVA-1097, в Java (о котором спрашивал ОП) ensureIndex() устарел в версии 2.12.0 драйвера Java и DBCollection.createIndex() - тот, который вам нужно использовать. DBCollection.ensureIndex() (ссылка на версию 2.12) недоступна в DBCollection API Java больше.

Ответ 3

Метод ensureIndex, найденный в java-драйвере (v2.12 и старше), будет кэшировать, существует ли индекс в коллекции. Поскольку несколько клиентов могут потенциально изменять индексы в коллекции, значение кеша может быть ошибочным, и драйвер не сможет создать отсутствующий индекс.

По этой причине драйвер java реализовал метод createIndex с одинаковым поведением, за исключением того, что он не будет кэшировать статус индекса.

С драйверами 2.12 и выше вы можете заменить ensureIndex на createIndex и ожидать такого же поведения, за исключением того, что производительность была выше, когда драйвер раньше считал, что индекс уже существует и возвращается, не отправляя команду createIndex на mongo server.

Что касается того, почему они не изменили поведение без переименования - я понятия не имею.