java中使用mongodb的createIndex()和ensureIndex()的区别

cuxqih21  于 2023-04-05  发布在  Go
关注(0)|答案(5)|浏览(182)

Java中使用MongoDB的createIndex()ensureIndex()有什么区别?我在谷歌上搜索了一下,但没有得到满意的答案。

abithluo

abithluo1#

**更新2:**最初的答案以及第一次更新错误地引用了Mongo shell文档,而不是Java API。

在Java中,DBCollection.ensureIndex()在版本2.12中被弃用,并在版本3.0中被删除。

更新日期:

db.collection.ensureIndex()自版本3.0.0起已弃用。
现在是db.collection.createIndex()的别名。

原件:

createIndex()自1.8起已弃用
它用于在集合上创建索引,而ensureIndex()在指定的字段上创建索引(如果索引不存在)。此外,当我们执行createIndex()两次时,第二次执行只会失败,而ensureIndex()可以多次调用它,它将不会失败
关于ensureIndex()的行为,他们还改变了一件事,在以前版本的mongodb(版本小于2.6)中,如果现有文档的索引条目超过最大索引键长度,则会创建索引,但Mongodb不会索引此类文档,而在最近的版本中不会创建索引

pvabu6sv

pvabu6sv2#

在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中不再可用。

y1aodyip

y1aodyip3#

java驱动程序(v2.12及更早版本)中的ensureIndex方法将缓存集合上是否存在索引。由于多个客户端可能会更改集合上的索引,该高速缓存值有时可能是错误的,驱动程序将无法创建缺失的索引。
出于这个原因,java驱动程序实现了一个具有相同行为的createIndex方法,除了它不会缓存索引状态。
对于驱动程序2.12及以上版本,您可以将ensureIndex替换为createIndex,并期待相同的行为,除了性能受到影响,驱动程序以前认为索引已经存在并返回而不向mongo服务器发送createIndex命令。
至于为什么他们没有改变行为而不重命名-我不知道。

zpf6vheq

zpf6vheq4#

自版本〉3.0.0以来已弃用:ensureIndex()现在是db.collection.createIndex()的别名。

ncecgwcz

ncecgwcz5#

在5.0中删除db.collection.ensureIndex()已替换为db.collection.createIndex()
快照:

相关问题