MongoDB索引是否在重启后持久存在?

时间:2013-01-15 07:57:13

标签: mongodb mongoose

在此处引用指南,http://docs.mongodb.org/manual/core/indexes/我无法判断字段的Mongo索引是否持久存储。

如果使用ensureIndex()在应用程序中调用(并完成)MongoDB,则会发生以下情况:

  1. 重新启动使用MongoDB的应用程序。随后对ensureIndex()的调用是否会导致完整的重新索引?
  2. 重新启动MongoDB服务器。稍后从客户端应用程序调用{​​{1}}会重建吗?
  3. 这是否会受到多个客户会话的影响?我假设每个文档的整个集合中的索引是全局的:ensureIndex()

1 个答案:

答案 0 :(得分:4)

  

重新启动使用MongoDB的应用程序。随后对ensureIndex()的调用会导致完整的重新索引吗?

不,它应该(与其他所有驱动程序一样)注册为no op,因为索引已经存在。一些驱动程序提供了一种缓存机制,可以在不进入服务器的情况下检测是否已创建索引(即Python)。

  

重新启动MongoDB服务器。稍后从客户端应用程序调用ensureIndex()会重建吗?

与上述相同

  

这是否会受到多个客户端会话的影响?我假设索引在每个文档的整个集合中是全局的:“MongoDB在每个集合级别定义索引。”

是的索引存储在集合本身的MongoDB中(技术上,作为db.ns文件中的命名空间)。由于它是ensureIndex的单点知识,并且索引是单个进程(非常类似于写锁定),因此多个连接不应影响索引创建是否已注册两次。