【问题标题】:Are MongoDB indexes persistent across restarts?MongoDB 索引是否在重新启动时保持不变?
【发布时间】:2013-01-15 16:14:45
【问题描述】:

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

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

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

【问题讨论】:

  • 你有分片或复制吗?
  • 这会影响这些案例吗?我问的是简单的案例,但你引起了我的兴趣。

标签: mongodb mongoose


【解决方案1】:

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

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

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

同上

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

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

【讨论】:

  • 感谢您的回答。 MongoDB 对索引持久性不是很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多