web-dev-qa-db-ja.com

Java mongodbを使用する場合のcreateIndex()とensureIndex()の違い

createIndex()ensureIndex() in Java MongoDBを使用)の違いは何ですか?これをグーグルで検索しましたが、満足のいく答えが得られませんでした。

39
Amit Chahar

pdate 2:元の回答と最初の更新では、Java API。)の代わりに誤ってMongo Shellドキュメントを参照しています。

Javaでは、 DBCollection.ensureIndex() はバージョン2.12で非推奨になり、バージョン3.0で削除されました。 DBCollection.createIndex() は使用すべきものです。

更新:
db.collection.ensureIndex()は、バージョン3.0.0以降廃止されました。
db.collection.createIndex() のエイリアスになりました。

オリジナル:
createIndex()1.8から非推奨

コレクションにインデックスを作成するために使用されましたが、ensureIndex()は指定されたfieldにインデックスを作成します(インデックスがまだ存在しない場合)。さらに、createIndex()を2回実行すると、2回目の実行は単にfailになりますが、ensureIndex()では複数回呼び出すことができ、失敗しない

また、既存のドキュメントのインデックスエントリが最大インデックスキーの長さを超えている場合、mongodbの以前のバージョン(2.6より前のバージョン)でensureIndex()の動作に関して変更されたもう1つのことインデックス作成されるしかしMongodb インデックスを作成しないそのようなドキュメントに対して、最近のバージョンではインデックスは作成されない

28
sol4me

Java API、DBCollection.ensureIndex()は非推奨です、「通常の」MongoDB API(応答時)とまったく逆の方法でUpdate:この不整合は解決されたようで、db.collection.createIndex()がMongo Shellのdb.collection.ensureIndex()に置き換えられましたまた。

https://jira.mongodb.org/browse/Java-1097 にあるように、Java(OPが尋ねた)ensureIndex()は、Javaドライバーのバージョン2.12.0で非推奨になりました。 DBCollection.createIndex() は使用する必要があります。 DBCollection.ensureIndex() (バージョン2.12へのリンク)は DBCollection Java APIではもう使用できません。

14
Jens Grivolla

Javaドライバー(v2.12以前)にあるensureIndexメソッドは、コレクションにインデックスが存在するかどうかをキャッシュします。複数のクライアントがインデックスを変更する可能性があるためコレクションの場合、キャッシュ値が誤っている可能性があり、ドライバーは欠落したインデックスの作成に失敗します。

このため、JavaドライバーはcreateIndexメソッドを実装しましたが、インデックスステータスをキャッシュしないことを除き、同じ動作をします。

ドライバ2.12以降では、ensureIndexcreateIndexに置き換えて、同じ動作を期待できます。ただし、以前はインデックスがすでに存在し、createIndexを送信せずに戻るパフォーマンスヒットを除きます。 mongoサーバーへのコマンド。

名前を変更せずに振る舞いを変更しなかった理由について-私にはわかりません。

1
GaspardP

バージョン> 3.0.0以降非推奨:db.collection.ensureIndex()はdb.collection.createIndex()のエイリアスになりました。

1
Surender Singh