3

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

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

  1. 使用的应用程序MongoDB重新启动。随后的调用会ensureIndex()导致完整的重新索引吗?
  2. MongoDB服务器重新启动。以后ensureIndex()从客户端应用程序调用是否会重建?
  3. 拥有多个客户端会话是否会影响这些?根据文档,我假设索引在整个集合中是全局的:"MongoDB defines indexes on a per-collection level."
4

1 回答 1

6

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

不,它应该(与其他所有驱动程序一样)注册为无操作,因为索引已经存在。一些驱动程序提供了一种缓存机制来检测是否已创建索引(即 Python),而无需访问服务器。

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

和上面一样

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

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

于 2013-01-15T08:14:45.983 回答