![MongoDB 前台索引构建阻止所有数据库的二次读取](https://linux22.com/image/686748/MongoDB%20%E5%89%8D%E5%8F%B0%E7%B4%A2%E5%BC%95%E6%9E%84%E5%BB%BA%E9%98%BB%E6%AD%A2%E6%89%80%E6%9C%89%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E4%BA%8C%E6%AC%A1%E8%AF%BB%E5%8F%96.png)
今天,我们的 MongoDB 3.0.12 分片集群的一位用户(错误地)在其自己的数据库(pride_archive_ms)上发布了前台索引构建,在每个副本集(分片)的主成员上完成操作后,它被复制到辅助成员。
我原本以为索引构建仍在进行的数据库会被阻止读写,但实际上全部使用 secondary 或 secondaryPreferred 读取首选项时,数据库的读/写操作会被阻止。任何打开的会话都将被附加。这是预期的行为吗?文档报告称:
任何需要对所有数据库进行读或写锁定的操作(例如 listDatabases)都将等待前台索引构建完成。
但在我们的例子中,在与建立索引的数据库不同的数据库上执行简单的 find()。
有人可以解释一下吗?
谢谢
答案1
托马斯·舒伯特(Thomas Schubert)在以下文章中回答了这个问题:
https://jira.mongodb.org/browse/SERVER-25168
secondaryPreferred
不过,我想知道为什么当指定读取首选项时,路由器没有检测到读锁定的辅助服务器并提供来自主服务器的查询。