首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb,只能在给定时间或手动触发辅助复制吗?

Mongodb,只能在给定时间或手动触发辅助复制吗?
EN

Stack Overflow用户
提问于 2015-04-22 18:27:16
回答 1查看 286关注 0票数 1

我不是mongodb专家,所以我现在对服务器设置有点不确定。

我有一个使用wiredtiger运行mongo3.0.2的实例,它同时接受读和写操作。它从客户端收集日志,所以写负载是不错的。一天一次,我想要处理这些日志并使用聚合框架计算一些度量,处理的数据集就像上个月的所有日志一样,所有的计算大约需要5-6小时。我正在考虑拆分写和读以避免我的集合上的锁(服务器在我读取的时候继续写日志,新写的日志可能与我的查询匹配,但是我可以跳过它们,因为我不需要100%的准确性)。

换句话说,我希望使用辅助读取设置,复制不会连续执行,而是在所有读取操作启动之前,在配置好的时间或更长的时间内启动。

我是从node.js中进行所有处理的,所以我在这里看到的一个选项是导出在昨天这样的时间段中创建的数据,然后导入它来读取实例,并在导入完成后进行计算。我正在尽可能地查看副本集和主/从复制,但是我没有了解如何配置它以实现所描述的场景。所以也许我错了错过了什么?为达到这一点,还有其他选择吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 20:48:21

您使用复制集的想法是有缺陷的,原因有几个。

首先,复制集总是复制整个单神实例。您不能为单个集合启用它,当然也不能只为集合的特定文档启用它。

其次,在开始生成报表之前禁用复制并启用它也不是一个好主意。启用复制时,新的从服务器将不会立即更新.这将需要一段时间,直到它已经处理的变化,因为它的最后一次接触的主人。不可能知道这需要多长时间(您可以使用rs.status()检查次要数据在主服务器后面的距离,并将次要optimeDate与其lastHeartbeat日期进行比较)。

但是,当您希望对由timespan选择的文档子集执行数据挖掘时,还有另一种解决方案。

将要分析的文档传输到新集合。您可以使用一个仅由一个$match组成的聚合管道来完成这个任务,该管道与上个月的文档匹配,然后是一个$out。out操作符指定聚合的结果不是发送到应用程序/shell,而是写到一个新集合中(在这种情况发生之前会自动清空)。然后,您可以在不锁定实际集合的情况下对新集合执行报告。它还具有这样的优点,即您现在在一个更小的集合上操作,所以查询将更快,特别是那些不能使用索引的查询。而且,您的数据不会在聚合之间发生更改,因此您的报告之间不会有任何不一致之处,因为它们之间的数据会发生更改。

当您确信需要第二台服务器来生成报表时,仍然可以使用复制并在辅助服务器上执行聚合。但是,我建议您使用建立一个适当的副本集 (由主、次和仲裁者组成),并始终保持复制活动。这不仅确保您的数据在生成报表时不会过时,还会给您提供自动故障转移的重要好处,因为您的主要功能由于某种原因而下降。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29805974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档