[英]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.