Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将MongoDB(或CouchDB)实时复制到多个远程客户端_Mongodb_Couchdb_Real Time_Database Replication_Database - Fatal编程技术网

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

如何将MongoDB(或CouchDB)实时复制到多个远程客户端,mongodb,couchdb,real-time,database-replication,database,Mongodb,Couchdb,Real Time,Database Replication,Database,我正在考虑如何设计一种机制,将一个(可能很大的)MongoDB或其他NoSQL(CouchDB等)数据库同时复制到几十个客户端。客户端的功能类似于副本集,但复制是单向的,远程客户端将属于其他方。具体而言,我正在寻找以下功能: 实时:应尽快将对主数据库的更改推送到客户端 复制到新客户端:新客户端必须能够连接、自动同步大部分现有数据,然后接收实时更新 高效:在连接多个客户端的情况下,数据的初始同步/传输和实时更新跟踪(“diff”(如果愿意)在计算上都是高效的 安全:主数据库提供了一个接口,远程客

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

  • 实时:应尽快将对主数据库的更改推送到客户端
  • 复制到新客户端:新客户端必须能够连接、自动同步大部分现有数据,然后接收实时更新
  • 高效:在连接多个客户端的情况下,数据的初始同步/传输和实时更新跟踪(“diff”(如果愿意)在计算上都是高效的
  • 安全:主数据库提供了一个接口,远程客户端(不属于同一所有者或系统)可以连接到该接口:即,我们不能只将所有客户端添加到主数据库的副本集中
  • 健壮:客户端和主数据库之间的临时连接故障应该可以轻松有效地恢复
从某种意义上说,服务器正在发布一组数据,而客户端正在订阅数据。我意识到这是一个很难解决的软件工程问题,据我所知,还没有一个软件能够完全实现这一点。然而,我想到的一些方法非常接近,我将在下面列出

  • :它设计用于类似Mongo的集合,并准确地实现了发布和订阅一组数据(而不是消息流)的模型。它管理初始同步并发送实时更改。然而,它仍在开发中,远不是一个具有工业实力的解决方案——目前的缺点是,服务器以一种可能效率低下的方式保存每个客户端状态的副本,并且仅对可以放入web应用程序内存中的集合进行测试。而且,似乎DDP。如果有人能举出一些例子,说明通过DDP可以同步多大的集合,那就太好了。(另见:)

  • 广播:使用高吞吐量的消息总线,例如,可以一次有效地将oplog发送到多个客户端。这解决了一些系统实现挑战。但是,这要求客户端从初始同步开始,以某种方式使其与当前主状态足够接近,然后从适当的点开始重放oplog

  • :考虑到文档的稀疏性,我不确定这是如何实现的以及它有多强大。然而,它似乎在远程数据库连接上工作但是,当多个客户端同时尝试复制时,这有多高效?(与此类似的黑客攻击是使客户端MongoDB;但是,这似乎与预期用途相去甚远。另请参阅:)


请提供已实现部分功能的软件或软件片段的指针,或提供有效实现部分功能所需的算法/数据结构的建议。

如果您专门寻找实时复制,我建议您研究专门用于此目的的SaaS产品,例如

我试图为类似的场景找到一个好的体系结构,尽管N台主机都有自己特有的数据,而且它们必须将这些数据同步到分散在全球的所有其他服务器。我很想知道你过得怎么样。正确地设计大规模的体系结构将为以后的工作节省上千个麻烦。抱歉@wiredparie,但我不同意!