我有2个mongodb放在2个不同的服务器上。每个都有一个集合items
。第一个集合包含生产数据,执行大量insert
和update
,第二个集合为空。
现在我的任务是将数据从第一个集合传输到第二个集合,并使它们保持同步几个小时。
我们已经实施 oplog
解决方案。但由于我们没有权限在第一个mongodb中收听local
集合,我们必须找到另一条出路。
我想到的方法之一是创建2个服务: - 在第一次调用中,我查询第一个集合中的所有数据并转移到第二个集合。然后我将这些数据保存在内存中。 - 在第二次调用中,我查询第一个集合中的所有数据,然后使用工具来区分它们,然后将差异发送到第二个集合。 - 重复操作,直到其中一项服务被删除。
显而易见的问题是查询和比较数据的资源浪费巨大。
所以我需要你的帮助才能找到解决这个问题的另一种方法。
提前致谢。
HP
答案 0 :(得分:0)
您在OP中描述的解决方案:
我想到的方法之一是创建2个服务: - 在第一次调用中,我查询第一个集合中的所有数据并转移到第二个集合。然后我将这些数据保存在内存中。 - 在第二次调用中,我查询第一个集合中的所有数据,然后使用工具来区分它们,然后将差异发送到第二个集合。 - 重复操作,直到其中一项服务被删除。
...让我觉得这是某种blue/green deployment model或者你的意图是在面对第一个系列失去Mongo商店时提供弹性。如果是这样,那么我认为正确的方法是使用Mongo复制集,让Mongo为您提供弹性。
但是,我可能会遗漏一些东西......也许你的情况有一些细节,(a)我无法从你的问题中推断出来;(b)要求某种手动,接近实时,从一个集合复制到另一个集合。如果是这样,那么我认为oplog解决方案是这个用例的通用解决方案。也许你应该重新审视一下,看看你是否能克服这个问题:
我们缺乏在第一个mongodb中收听本地收藏的权限
如果那真的不是跑步者,那么如果你可以拦截对第一个集合的所有写入(即,如果你的应用程序提供了一个节流点或钩子来对所有写入应用行为),你可以实现这样的事情:
例如:
data
的INSERT
123
的DELETE
123
123