2013-04-06 83 views
0

流星能够保持高性能,同时服务于多个不同的用户?流星多租户功能

举例来说,如果我宣布了下述出版物,允许用户只能检索自己的文档:

Meteor.publish("UserList", function() { 
    return Documents.find({user: this.userId}); 
}); 

而且想象成千上万的用户从本出版物喂养,每一个为自己的文档。当一个文件被更新时会发生什么?也就是说,所有的用户都被告知他们的名单可能已经改变了?服务器是否为所有可能的用户执行查询并只通知那些重要的用户? Meteor如何在这种情况下保持性能?

或者有没有更好的方法来实现Meteor的多租户?

回答

1

在这种情况下,只有订阅了该发布功能的用户才能获得更新。

流星将发送集合到该特定订阅的任何更改。用户没有被告知文档可能已经改变,他们只是简单地发送数据更改。 DDP有一种'crud'告诉客户该做什么,即删除,更新,插入..

如果您的Documents.find以上,该特定用户将只发送他们的更新和其他用户赢得根本没有通知。

因为在0.5.7中有一些变化,所以我不是100%确定的,但是对于通过DDP的每个连接都会有订阅,每个都有自己的查询(即使查询与其他订阅相同) 。它看起来很快就会在trello上实现缓存:https://trello.com/card/improve-server-side-performance-of-subscriptions/508721606e02bb9d570016ae/10

DDP仍处于pre1版本,但我想这将在路上进一步优化,特别是对于不太可能的查询每个订阅(IE的Documents.find()代替Document.find({user:this.userId})

有关DDP协议全规格独特看看:https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md