繁体   English   中英

同步两个MongoDB集合

[英]Synchronise two MongoDB collections

我有2个mongodb放在2个不同的服务器中。 每个都有一个收藏items 第一个集合具有生产数据,并执行许多insertupdate ,第二个集合为空。

现在,我的任务是将数据从第一个集合传输到第二个集合,并使它们保持同步几个小时。

我们已经实现oplog解决方案。 但是由于我们没有权限在第一个mongodb中收听local集合,因此我们必须找到另一种出路。

我想到的一种方法是创建2个服务:-在第一次调用中,我查询第一个集合中的所有数据并将其传输到第二个集合。 然后,我将该数据保存在内存中。 -在第二次调用中,我查询第一个集合的所有数据,然后使用工具对它们进行比较,然后将差异发送到第二个集合。 -重复直到2个服务之一被取消。

明显的问题是查询和比较数据的资源浪费。

因此,在您需要其他帮助的情况下,我需要您的帮助。

提前致谢。

生命值

您在OP中描述的解决方案:

我想到的一种方法是创建2个服务:-在第一次调用中,我查询第一个集合中的所有数据并将其传输到第二个集合。 然后,我将该数据保存在内存中。 -在第二次调用中,我查询第一个集合的所有数据,然后使用工具对它们进行比较,然后将差异发送到第二个集合。 -重复直到2个服务之一被取消。

……让我认为这是一种蓝/绿部署模型,或者您的意图是在面对第一个系列的Mongo商店丢失时提供弹性。 如果是这样,那么我认为正确的方法是使用Mongo副本集,让Mongo为您提供弹性。

但是,我可能会遗漏某些东西……也许您的情况有一些细节,这些细节(a)我无法从您的问题中推断出来,并且(b)需要某种手动,近乎实时的副本,收集到另一个。 如果是这样,那么我认为oplog解决方案该用例的通用解决方案。 也许您应该重新审视一下是否可以解决此问题:

我们没有权限在第一个mongodb中收听本地集合

如果那不是真正的竞争者,那么如果您可以拦截对第一个集合的所有写操作(即,如果您的应用程序提供了将行为应用于所有写操作的调节点或钩子),则可以实现以下内容:

  • 在继续写之前,请在某种可执行任务中包装传入的命令(即数据和写类型:insert | update | delete)
  • 将该任务放在队列中
  • 提供一个作用于这些任务的线程池,将每个任务的命令应用于第二个同事。

例如:

  • 接收包含data的INSERT
    • 将此插入内容应用于第一个集合(通常会这样做)
    • 异步(以免对应用程序吞吐量产生不利影响)将此插入内容应用于第二个集合
  • 收到实体123的DELETE
    • 从第一个集合中删除实体123
    • 从第一个集合中异步删除实体123
  • ...等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM