我有一个MongoDB副本集有三个成员:主要,次要和隐藏的辅助,仅用于备份。 理想情况下,我想添加专门用于运行缓慢批量操作的附加实例。 这个想法是让这个实例运行map-reduce风格的操作,这可能需要很长时间才能完成,而不会减慢快速完成所需的常规查询。
我不知道可以实现这一点的Mongoconfiguration。 我很乐意听到如何处理繁重的离线请求,而不会影响短时间,接近实时的请求。
这不是configuration的问题。 您正常的查询被发送到当前的主要。 所以你所要做的就是确保你的批量操作(我假设聚合和/或mapReduce作业)是针对辅助操作运行的。 您可以通过将readPreference设置为secondary或secondaryPreferred来完成此操作。
但是这带来一些严重的缺点,
$out阶段的聚合都将在主服务器上执行 如果使用secondary或secondaryPreferred读取优先选项,这是不可能的,唯一的办法是尽量减less长时间运行的操作(如聚合)我们的mapReduce作业的负载是分片,分裂在多台机器上的负载。 请注意,为了实现这样的负载分配,需要仔细的计划和数据build模。
由于您计划在新副本上执行缓慢的查询。 您可能需要为长时间运行的map-reduce查询设置适当的延迟时间。 如3分钟或10分钟。 通过这个延迟,你可以从你的新副本中获得完整的性能。 它不会一次处理多个查询。
这里是文档: 延迟副本集成员