Différence entre createIndex() et ensureIndex() en java en utilisant mongodb

Quelle est la différence entre createIndex() et ensureIndex() en Java en utilisant MongoDB? J'ai googlé cela mais je n'ai pas eu de réponse satisfaisante.

35
demandé sur Mike B. 2014-09-22 11:21:23

4 réponses

Mise à Jour 2: La réponse originale, ainsi que la première mise à jour, font référence à tort à la documentation du shell Mongo au lieu de L'API Java.

En Java, DBCollection.ensureIndex() a été obsolète dans la version 2.12 et supprimé dans la version 3.0. DBCollection.createIndex() est celui qui doit être utilisé.

Mise à Jour:
db.collection.ensureIndex() est déprécié depuis la version 3.0.0.
Est maintenant un alias pour db.collection.createIndex () .

D'Origine:
createIndex() est obsolète depuis 1.8

Il a été utilisé pour créer des index sur les collections alors que ensureIndex()crée un index sur le champ spécifié si l'index n'existe pas déjà. De plus lorsque nous exécutons createIndex() deux fois la deuxième exécution sera juste échouer, alors qu'avec ensureIndex(), vous pouvez l'appeler plusieurs fois et pas manqué

Et encore une chose qu'ils ont changée en ce qui concerne le comportement de ensureIndex(), dans les versions précédentes de mongodb (versions inférieures à 2.6) si l'entrée d'index pour un document existant dépasse la longueur maximale de la clé d'index un index serait créé mais Mongodb n'indexerait pasde tels documents alors que dans la version récente aucun index ne serait créé.

26
répondu sol4me 2016-05-10 14:42:34

Dans L'API Java, DBCollection.ensureIndex() est obsolète , exactement l'inverse par rapport à L'API MongoDB "normale" (au moment de la réponse) . Update : cette incohérence semble avoir depuis été résolue, et db.collection.createIndex() remplace maintenant db.collection.ensureIndex() dans le shell Mongo également.

Comme vous pouvez le voir dans https://jira.mongodb.org/browse/JAVA-1097 , en Java (que l'OP a demandé) ensureIndex() était obsolète dans la version La version 2.12.0 du pilote Java, et DBCollection.createIndex() est l'un vous avez besoin d'utiliser. DBCollection.ensureIndex() (lien vers la version 2.12) n'est plus disponible dans l'API JavaDBCollection .

14
répondu Jens Grivolla 2017-03-30 10:24:57

La méthode ensureIndex trouvée dans le pilote java (v2. 12 et plus) mettrait en cache si l'index existe ou non sur la collection. Étant donné que plusieurs clients pourraient potentiellement modifier les index sur une collection, la valeur du cache peut parfois être erronée et le pilote ne parviendrait pas à créer un index manquant.

Pour cette raison, le pilote java a implémenté une méthode createIndex avec un comportement identique, sauf qu'il ne mettra pas en cache l'état de l'index.

Avec les pilotes 2.12 et ci-dessus, vous pouvez remplacer ensureIndex par createIndex et attendez le même comportement, sauf pour le hit de performance où le pilote penserait autrefois que l'index existe déjà et retournerait sans envoyer la commande createIndex au serveur mongo.

Quant à la raison pour laquelle ils n'ont pas changé le comportement sans renommer - que je n'ai aucune idée.

1
répondu GaspardP 2015-10-21 16:20:03

Obsolète depuis la version > 3.0.0: DB.collection.ensureIndex () est maintenant un alias pour db.collection.createIndex ().

1
répondu Surender Singh 2018-07-14 17:22:48