远程服务器中具有索引的本地MongoDB实例

远程服务器中具有索引的本地MongoDB实例,mongodb,Mongodb,我们的一个客户机有一台运行MongoDB实例的服务器,我们必须使用存储在其MongoDB数据库中的数据构建一个分析应用程序,该数据库经常更改 客户要求如下: 我们不直接连接到他们的MongoDB实例,也不在他们的服务器上运行另一个MongoDB实例,而是在办公室的机器上使用他们的MongoDB数据库目录远程运行我们自己的MongoDB实例 我们建议部署一个REST应用程序,获取数据库转储的副本,但他们不希望这样。他们只想让我们运行自己的MongoDB intance,它与MongoDB实例目

我们的一个客户机有一台运行MongoDB实例的服务器,我们必须使用存储在其MongoDB数据库中的数据构建一个分析应用程序,该数据库经常更改

客户要求如下:

  • 我们不直接连接到他们的MongoDB实例,也不在他们的服务器上运行另一个MongoDB实例,而是在办公室的机器上使用他们的MongoDB数据库目录远程运行我们自己的MongoDB实例
我们建议部署一个REST应用程序,获取数据库转储的副本,但他们不希望这样。他们只想让我们运行自己的MongoDB intance,它与MongoDB实例目录相连接。这可能吗


过去两天我一直在寻找解决方案,我们必须在周一之前提交解决方案。我真的需要一些帮助

我认为运行指向同一数据库文件的两个数据库是不可能的,甚至是不推荐的

您可以使用
mongorestore
直接从其数据文件还原,但这仅在其mongod实例未运行时才起作用(因为
mongorestore
需要锁定目录)

另一个解决方案是执行此操作,然后恢复到本地数据库

这种备份/恢复解决方案的缺点是,您的数据不会一直同步

最好的解决方案可能是使用具有隐藏成员的副本集。 您可以创建仅包含两个成员的副本集:

  • 主-这将是客户端服务器
  • 次要-隐藏,投票和优先级设置为0。这将是您的本地实例
  • 它们的服务器将始终是主服务器(因为隐藏成员不能成为主服务器)。客户端无法看到隐藏的成员,因此无论出于何种目的,您的服务器都将是只读的。
    另一个好处是,MongoDB复制将完成服务器之间同步数据的所有“繁重”工作,并且您的实例将始终具有最新数据。

    我认为这是正常的请求,因为分析查询可能会在生产服务器上造成太多负载。将生产数据库和分析数据库分开是很正常的

    最简单的选择是使用MongoDB复制。设置MongoDB副本集,以生产数据库实例为主,分析数据库实例为辅,并将分析实例配置为从不成为主实例

    如果无法使用复制—例如,客户端不希望使用复制,则服务器无法直接彼此连接…-还有另一种选择。您可以从远程数据库读取oplog,并将操作应用于数据库实例。这正是副本集工作的低级机制,但您也可以手动执行。例如,MMS(Mongo监控服务)备份使用读取oplog对MongoDB进行在线备份

    更新:可能是实时应用从本地服务器上的远程服务器提取的复制oplog的合适工具