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