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.
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éé.
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 .
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.
Obsolète depuis la version > 3.0.0: DB.collection.ensureIndex () est maintenant un alias pour db.collection.createIndex ().