在此处引用指南,http://docs.mongodb.org/manual/core/indexes/我无法判断字段的Mongo索引是否持久存储。
如果使用ensureIndex()
在应用程序中调用(并完成)MongoDB
,则会发生以下情况:
MongoDB
的应用程序。随后对ensureIndex()
的调用是否会导致完整的重新索引?MongoDB
服务器。稍后从客户端应用程序调用{{1}}会重建吗?ensureIndex()
答案 0 :(得分:4)
重新启动使用MongoDB的应用程序。随后对ensureIndex()的调用会导致完整的重新索引吗?
不,它应该(与其他所有驱动程序一样)注册为no op,因为索引已经存在。一些驱动程序提供了一种缓存机制,可以在不进入服务器的情况下检测是否已创建索引(即Python)。
重新启动MongoDB服务器。稍后从客户端应用程序调用ensureIndex()会重建吗?
与上述相同
这是否会受到多个客户端会话的影响?我假设索引在每个文档的整个集合中是全局的:“MongoDB在每个集合级别定义索引。”
是的索引存储在集合本身的MongoDB中(技术上,作为db.ns
文件中的命名空间)。由于它是ensureIndex
的单点知识,并且索引是单个进程(非常类似于写锁定),因此多个连接不应影响索引创建是否已注册两次。