gpt4 book ai didi

mongodb - 如何实现将 MongoDB(或 CouchDB)实时复制到多个远程客户端

转载 作者:可可西里 更新时间:2023-11-01 09:55:50 25 4
gpt4 key购买 nike

我正在考虑如何设计一种机制来同时将一个(可能很大的)MongoDB 或其他 NoSQL(CouchDB 等)数据库复制到数十个客户端。客户端将像副本集一样运行,但复制是单向的,远程客户端将属于其他方。具体来说,我正在寻找以下功能:

  • 实时:对主数据库的更改应尽快推送给客户端
  • 复制到新客户端:新客户端必须能够连接,自动同步大部分现有数据,然后接收实时更新。
  • 高效:数据的初始同步/传输和实时更新跟踪(“差异”,如果您愿意的话)在计算上都是高效的,并且连接了多个客户端。
  • 安全:主数据库提供了一个接口(interface),远程客户端(不属于同一所有者或系统)可以连接到该接口(interface):即,我们不能只将所有客户端添加到主数据库的副本设置。
  • 稳健:客户端和主数据库之间的临时连接故障应该可以轻松高效地恢复。

在某种意义上,服务器正在发布一个数据集合,而客户端正在订阅它。我意识到这是一个困难的软件工程问题,据我所知,还没有一款软件能够准确地实现这一点。但是,我想到了一些接近的方法,我将在下面列出。

  • Meteor's DDP protocol :它旨在使用类似 Mongo 的集合来执行此操作,并准确地实现了发布和订阅一组数据(而不是消息流)的模型。它管理初始同步并发送实时更改。然而,它仍在开发中,远非工业强度的解决方案 - 目前的缺点是服务器以可能低效的方式保留每个客户端状态的副本,并且仅在适合网络内存的集合上进行测试应用程序。此外,似乎 DDP cannot efficiently sync an out-of-date database without fetching everything from scratch .如果有人能举出一些例子说明有多大的集合可以通过 DDP 同步,那就太好了。 (另请参阅:https://stackoverflow.com/q/10128430/586086)

  • 广播 Mongo oplog :使用像Apache Kafka这样的高吞吐量消息总线,一个人可能能够一次高效地将 oplog 发送给许多客户端。这解决了一些系统实现挑战。然而,这要求客户端从初始同步开始,以某种方式使它们足够接近当前的主状态,然后从适当的点开始重放操作日志。

  • Continuous replication a la CouchDB :考虑到文档的稀疏性,我不确定这是如何实现的以及它有多稳健。但是,它似乎确实可以通过远程数据库连接工作。 但是,当多个客户端试图同时复制时,这有多有效?(与此类似的 hack 是使客户端 MongoDB Priority 0 replica set members ;然而,这似乎还很远其预期用途。另请参阅:http://guide.couchdb.org/draft/replication.html )

请指出已经实现了部分功能的软件或软件片段,或者对有效执行此操作所需的算法/数据结构的建议。

最佳答案

如果您正在专门寻找实时复制,我建议您查看专门用于此目的的 SaaS 产品,例如 https://www.firebase.com/

关于mongodb - 如何实现将 MongoDB(或 CouchDB)实时复制到多个远程客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18734253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com