需要一些方法将数据从客户端数据库推送到中央数据库.基本上,有几个MongoDB在远程机器[客户端]上运行的实例,并且需要一些方法来定期更新中央mongo数据库,其中包含客户端中新添加和修改的文档.将其记录复制到单个中央服务器
例如:
如果我在3台机器上运行3个mongo实例,每台机器都有10GB的数据,那么在数据迁移之后,第4台机器的mongoDB必须有30GB的数据.并且中央mongoDB机器必须定期更新所有这3台机器的数据.但是这3台机器不仅获得了新文件,而且其中的现有文件可能会得到更新.我希望中央mongoDB机器也能获得这些更新.
MongoDB不正式支持您所需的复制策略.
甲MongoDB的副本集由具有在相同的副本集异步复制到一个或多个次级服务器的单个初级的.您无法将具有多个原色或复制的副本集配置到不同的副本集.
但是,根据您希望保持中央服务器最新状态以及需要管理的数据/更新量的积极程度,您的用例有几种可能的方法.
合并来自多个独立服务器的数据可能会产生意外冲突.例如,唯一索引不了解在其他服务器上创建的文档.
理想情况下,您合并的数据仍将由每个源服务器的唯一数据库名称分隔,因此您不会在具有相同名称空间且_id由不同源服务器共享的不同文档之间发生奇怪的串扰.
mongodump和mongorestore如果您只需要定期将内容同步到中央服务器,一种方法是使用mongodump和mongorestore.您可以mongodump从每个独立实例计划定期,并使用mongorestore它们将它们导入中央服务器.
这里有一个--db参数为mongorestore,可以让你恢复到与原名称不同的数据库(如果需要)
mongorestore仅执行插入到现有的数据库(即,不不执行更新或upserts).如果_id目标数据库上已存在相同的现有数据,则mongorestore不会替换它.
您可以使用mongodump选项,例如--query对要导出的数据更具选择性(例如,仅选择最近的数据而不是全部数据)
如果要限制每次运行时转储和恢复的数据量(例如,仅导出"已更改"数据),则需要确定如何处理中央服务器上的更新和删除.
考虑到这些警告,最简单的方法是使用完全转储和恢复(即使用mongorestore --drop)来确保复制所有更改.
oplog.如果需要更多实时或增量复制,可能的方法是在MongoDB复制上创建可用的游标oplog.
这种方法基本上是"滚动你自己的复制".您必须编写一个应用程序,在每个MongoDB实例上添加oplog,并查找感兴趣的更改以保存到中央服务器.例如,您可能只想复制选择性命名空间(数据库或集合)的更改.
可能感兴趣的相关工具是来自10gen实验室的实验性Mongo连接器.这是一个Python模块,它提供了一个用于拖尾复制的接口oplog.
您必须为此实现自己的代码,并学习/了解如何使用这些oplog文档
可能有一种替代产品可以"开箱即用"更好地支持您所需的复制模型.
小智 0
您应该知道,只有副本集用于进行复制,副本集始终意味着:一个主库,多个辅助库。写入始终转到主服务器。显然您想要 MongoDB 不支持的多主复制。因此,您想要研究不同的技术,例如 CouchDB 或 CouchBase。MongoDB 在这里爆发了。