【问题标题】:DDP vs Straight MongoDB access for synching large amounts of data用于同步大量数据的 DDP 与直接 MongoDB 访问
【发布时间】:2013-04-02 14:53:05
【问题描述】:

我们正在 Meteor 中构建一个将参与教育生态系统的应用。 有许多应用程序(例如 GradeBook、学生信息系统、报告系统……)都需要将其数据存储与 Meteor 保持同步。数据存储区的大小将达到数十万个文档。

我的理解是,DDP 用于将“客户端”连接到 Meteor 应用程序(通过在 Meteor 推送数据更改和 RPC 以将数据获取到 Meteor 时订阅提要)。并且“客户端”通常仅限于用户……因此与数据世界相比,数据集的大小相对较小(教师可能可以访问 250K 文档中的 100 个)。

如果我使用 DDP 将报告系统(作为“客户端”)连接到 Meteor,则需要同步存储中的所有数据...这是否意味着每次报告系统失去与 Meteor 的连接时,所有数据会从 Meteor 重新发送到 DDP 客户端吗? (因为报告系统对所有数据都感兴趣)......如果是这样的话,DDP 不会是保持应用程序同步的方式,对吧?......对于更小的范围数据集来说意味着更多...... ..我们可能应该直接与 Mongo 交互以保持同步。

谢谢! 迈克

【问题讨论】:

    标签: meteor


    【解决方案1】:

    基于此 http://meteor.com/blog/2012/03/21/introducing-ddp

    分布式数据协议。 DDP 是解决客户端 JavaScript 开发人员面临的最大问题的标准方法:查询服务器端数据库,将结果发送到客户端,然后在数据库发生任何变化时将更改推送到客户端。

    似乎很明显,任何新的 DDP 客户端都会接收所有数据,然后随着数据的变化而变化。

    我建议如果您的“客户端”不需要反应/实时更新/2 路同步,您应该直接从 mongo 中提取数据并避免“同步”的开销。对于“报告系统”,这应该是完全可以接受的,获取一堆数据,生成报告。您不应该关心在这种情况下更改数据,只关心快照和来自该快照的报告。

    如果您确实需要更实时的功能,那么 DDP 可能值得花费开销和初始设置困难。

    【讨论】:

      【解决方案2】:

      我认为 nate 的回答非常适合您应该做什么,尤其是考虑到数据量。如果您需要显示大量数据,如果您使用页面来使用分页订阅,这样您就可以享受实时功能(如果您决定使用它)而无需一次全部下载。请记住,目前数据是这样发送的(对于每个会话,如果选项卡关闭并重新打开,它将被重做):

      1 - Connect to DDP Server/Proxy (Long Polling now due to websocket issues with chrome)
      2 - Establish a 'subscription'
      3 - Fetch all data relevant to subscription (initial download)
      4 - Subscription is complete, now the client will 'listen' for changes
      5 - Any updates (remove/update/insert, etc) are sent down to the client
      

      目前确实没有一个同步系统可以使旧数据保持离线状态(在本地存储或索引数据库或任何东西中),因此可以避免第 3 步,而只会发生从该点开始的同步。

      请注意,如果连接中断(例如,在短时间内失去连接,Meteor 将失去与 DDP 线的连接,并且当它重新连接时,它会重新下载所有内容,就像从头开始一样。

      【讨论】:

      • 谢谢,Akshat。关键是我正在寻找一种方法来保持多个数据存储同步......所以连接丢失将会发生(这不是让前端应用程序连接到流星应用程序......这是关于将流星中发生的数据更改推送到其他应用程序的数据存储区)。我想我有我的答案 - DDP 不适合这种用途。
      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多