簡體   English   中英

使用mongodb在java中createIndex()和ensureIndex()之間的區別

[英]Difference between createIndex() and ensureIndex() in java using mongodb

使用MongoDB在Java中createIndex()ensureIndex()什么區別? 我用Google搜索了這個,但沒有得到滿意的答案。

更新2:原始答案以及第一次更新錯誤地引用了Mongo shell文檔而不是Java API。

在Java中, DBCollection.ensureIndex()在版本2.12中已棄用,在版本3.0中已刪除。 DBCollection.createIndex()是應該使用的。

更新:
從版本3.0.0開始,不推薦使用db.collection.ensureIndex()
現在是db.collection.createIndex()的別名。

原版的:
自1.8以來,不推薦使用 createIndex()

它用於在集合上創建索引,而如果索引尚不存在, ensureIndex()會在指定字段上創建索引。 此外,當我們執行createIndex()兩次時,第二次執行將失敗,而使用ensureIndex()您可以多次調用它並且它不會失敗

還有一件事是他們改變了ensureIndex()行為,在以前版本的mongodb(版本少於2.6)中,如果現有文檔的索引條目超過最大索引鍵長度, 則會創建一個索引但是Mongodb 不會索引這樣的文檔,而在最近的版本中, 不會創建索引

在Java API中,不推薦使用DBCollection.ensureIndex() ,與“普通”MongoDB API(響應時)相比,完全相反 更新 :此不一致似乎已解決, 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中不再可用。

在java驅動程序(v2.12和更早版本)中找到的ensureIndex方法將緩存集合中是否存在索引。 由於多個客戶端可能會更改集合上的索引,因此緩存值有時可能是錯誤的,並且驅動程序將無法創建缺失的索引。

出於這個原因,java驅動程序實現了一個具有相同行為的createIndex方法,除了它不會緩存索引狀態。

使用驅動程序2.12及更高版本,您可以通過createIndex替換ensureIndex並期望相同的行為,除了驅動程序以前認為索引已經存在的性能命中並返回而不將createIndex命令發送到mongo服務器。

至於為什么他們沒有重命名就不改變行為 - 我不知道。

自版本> 3.0.0后不推薦使用:db.collection.ensureIndex()現在是db.collection.createIndex()的別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM