В чем разница между createIndex()
и ensureIndex()
в Java с использованием MongoDB? Я искал это в Google, но не получил удовлетворительного ответа.
Разница между createIndex() и makeIndex() в java с использованием mongodb
Ответ 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.
Что касается того, почему они не изменили поведение без переименования - я понятия не имею.