2013-04-10 45 views
2

我们正在Meteor构建一个应用程序,该应用程序将参与教育生态系统。 有许多应用程序(例如GradeBook,学生信息系统,报告系统......)都需要将他们的数据存储与Meteor保持同步。数据存储大小将在数十万个文档中。DDP与Straight MongoDB访问同步大量数据

我的理解是,DDP用于将“客户端”连接到Meteor应用程序(通过在Meteor推进数据更改和RPC以将数据提交到Meteor时订阅提要)。而且,“客户”一般只限于用户......因此,与数据的范围相比,数据集的大小相对较小(教师可以访问250个文档中的100个)。

如果我使用DDP将报告系统(作为“客户端”)连接到Meteor,商店中的所有数据都需要同步......这是否意味着每当报告系统丢失与Meteor的连接时,所有数据都会从Meteor重新发送到DDP客户端? (因为报告系统对所有数据都感兴趣)......如果是这种情况,DDP将不会保持应用程序同步,对吗?......对于更小范围的数据集意味着更多。 ..我们可能应该直接与Mongo互动以保持同步。

谢谢! 迈克

回答

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,并且只会发生该点的同步。

这是一种精神,如果有一个连接中断(如失去connectivitiy了很短的时间peroid流星将失去连接到DDP线,当它重新连接再次下载的一切,好像它是从头开始。

+0

谢谢,Akshat。关键是我正在寻找一种方法来保持多个数据存储同步......所以连接的丢失将会发生(这不是关于有一个前端应用程序连接到流星应用程序......这是关于将流星中发生的数据更改推送到其他应用程序的数据存储)。我想我有我的答案 - DDP不适合这种用途。 – user1411290 2013-04-10 20:00:23

3

在此基础上 http://meteor.com/blog/2012/03/21/introducing-ddp

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

似乎很清楚,任何新的DDP客户端都会收到所有的数据,然后随着数据的变化而发生变化。

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

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