【问题标题】:How do I route reads in MongoDB to a specific secondary node when going through mongos?通过 mongos 时,如何将 MongoDB 中的读取路由到特定的辅助节点?
【发布时间】:2011-10-14 14:52:52
【问题描述】:
这是 MongoDB (2.0.0) 的分片设置,具有多个副本集,每个副本集 3 个节点。 Mongoid 正在通过 mongos。我想将一个辅助节点(每个副本集的)专用于长时间运行的查询,否则会影响用户体验;我不希望正常查询去那里。我看到我可以标记节点(数据中心感知),但是如何将读取发送到专门标记的节点?
另一个用例是在不同的数据中心有一个备份节点,但查询应该只去本地数据中心,而不是随机分布到远程数据中心。
【问题讨论】:
标签:
ruby-on-rails
mongodb
mongoid
sharding
【解决方案1】:
在查阅文档后,我很确定不可能做你想做的事,至少在数据库级别是不可能的。由于 mongos 从应用程序中提取分片,因此您无法将查询定向到特定分片。
但是,我认为这里有一个更高层次的概念。如果您有一个不需要阻塞 UI 的长时间运行的查询,您最好设置一个消息队列并将查询弹出到它上面。这样,查询可以在后台运行。如果所述查询通常会影响系统的性能,您可能需要通过将其拆分为适用于较小数据集的查询并在内存中重新组装此数据集或找到降低其优先级的方法来降低其影响系统资源不会受到太大影响。
希望这会有所帮助。