【发布时间】:2020-10-23 08:02:03
【问题描述】:
我有一个项目具有以下特点:
- 本地数据库上的本地 MongoDB 副本集
- MongoDB 图集中的云 MongoDB 实例
- 本地 MongoDB 应与 MongoDB atlas 保持同步
- 本地 MongoDB 实例可能会离线数天
- 一旦上线,它应该开始与 MongoDB atlas 同步
基本上,我正在寻找类似于 Realm 的东西,除了这个解决方案在实际的本地服务器上运行,而不是在移动设备上运行。
我研究了实时迁移,see here。但这似乎并不完全适合这个用例,因为它打算用于最终的切换,这是我不想要的。
因此,如何使用 MongoDB atlas 实现以下目标?我错过了什么?
我能否将 MongoDB 地图集视为本地副本集的一部分,并使用 MongoDB 的标准复制功能? IE。阿特拉斯永远是次要的。
【问题讨论】:
-
如果您的本地“始终是主要的”可以持续几天,那么地图集如何“始终是次要的”?此外,没有任何副本集允许其成员出现这样的停机时间。像coachdb 这样的东西会更适合这份工作。
-
你说得对。这是否意味着 MongoDB 不支持这个用例? IE。它不支持定期将数据从本地数据库同步到 Atlas,该本地数据库在离线和在线之间发生变化。
-
我怀疑在 Atlas 和 on-prem 中都可能有副本集成员,即使两者都始终开启。离线成员是一个单独的问题。正如我所说,虽然 couchdb 复制机制和冲突解决旨在解决其成员的长时间停机问题,但 Mongo 更关注性能和低延迟。离线超过 10 秒的成员需要完整的“将成员添加到副本集”同步例程才能再次加入该集。根据您的数据库库的大小,它可能需要几秒钟到几小时的时间,并且可能会对网络造成很大的压力(想想 AWS 账单)
-
对 - 但是,当您再次提到 AWS 时,MongoDB 具有全球可用性是一个很大的优势。似乎用 CouchDB 设置它并不容易。无论如何,您要说的是,如果我想将数据从本地 MongoDB 服务器复制到 MongoDB atlas,我将不得不编写自定义代码来处理这个问题。虽然 CouchDB 是为处理这种复制而构建的(无论服务器离线多长时间)
-
没错。只是为了说清楚,沙发只是我脑海中的选择之一。我的 2 点是 Mongo 作为数据库不适合长期离线成员,而 Atlas 作为托管数据库服务不允许外部副本集成员。至少不是作为标准报价。如果他们可以提供此类要求的报价,请尝试与他们的销售团队交谈。
标签: mongodb mongodb-atlas