繁体   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