我们的一个客户端有一个运行MongoDB实例的服务器,我们必须使用存储在他们的MongoDB数据库中的数据构建一个分析应用程序,这个数据库经常变化。
客户端的需求是:
我们建议部署REST应用程序,获取数据库转储的副本,但他们不想这样做。他们只想让我们运行我们自己的MongoDB意图,它与MongoDB实例目录连接在一起。这有可能吗?
在过去的两天里,我一直在寻找解决方案,我们必须在星期一之前提交一个解决方案。我真的需要一些帮助。
发布于 2014-06-21 09:13:04
我认为这是正常的请求,因为分析性查询可能会给生产服务器带来太多的负载。分离生产和分析数据库是很正常的。
最简单的选择是使用MongoDB复制。将MongoDB 复制集设置为以生产数据库实例为主实例,以分析数据库实例为辅助实例,并将分析实例配置为永不成为主实例。
如果无法使用复制-例如客户端不希望这样,服务器不能直接连接到对方.-还有另一种选择。您可以通过从远程数据库读取oplog并将操作应用于数据库实例。这正是复制集工作的低层次机制,但您也可以手动完成。例如,MMS ()备份使用读取oplog进行MongoDB的在线备份。
更新: 蒙哥布格可能是本地服务器上从远程服务器上提取复制oplog的实时应用的正确工具。
发布于 2014-06-21 08:55:03
我不认为运行指向相同数据库文件的两个数据库是可能的,甚至是不建议的。
您可以使用mongorestore直接从他们的数据文件中恢复,但是只有当他们的mongod实例没有运行时(因为mongorestore需要锁定目录),这才能工作。
另一个解决方案是执行文件系统快照,然后恢复到本地数据库。
这种备份/还原解决方案的缺点是,您的数据不会一直被同步。
最好的解决方案可能是使用带有隐藏成员的副本集。您可以只使用两个成员创建一个副本集:
它们的服务器将始终是主服务器(因为隐藏的成员不能成为主服务器)。客户端无法看到隐藏的成员,因此对于所有意图和目的,您的服务器将只被读取。另一个好处是,MongoDB复制将完成服务器之间同步数据的所有“繁重”工作,并且您的实例将始终拥有最新的数据。
https://stackoverflow.com/questions/24338153
复制相似问题