Meteor是否能够在为多个不同用户提供服务的同时保持高性能?
例如,如果我声明以下出版物,只允许用户检索自己的文档:
Meteor.publish("UserList", function () {
return Documents.find({user: this.userId});
});
想象一下,成千上万的用户正在从这个出版物中获取信息,每个用户都有自己的文件。当一个文档更新时会发生什么?即,是否通知所有用户的列表可能已更改?服务器是否对所有可能的用户执行查询并仅通知那些重要的用户?在这种情况下,Meteor如何保持性能?
或者有更好的方法在Meteor中实施多租户吗?
答案 0 :(得分:1)
在这种情况下,只有订阅该发布功能的用户才能获得更新。
Meteor会将对集合的任何更改发送到该特定订阅。订户未被告知文档可能已更改,他们只是简单地发送了数据更改。 DDP有一种'crud'告诉客户端要做什么,即删除,更新,插入..
对于您上面的Documents.find
,该特定用户只会收到他们的更新,而其他用户根本不会收到通知。
我不是100%肯定这个部分,因为0.5.7中有一些变化,但是对于每个通过DDP的连接,都会有一个订阅,每个都有自己的查询(即使查询与其他订阅相同)。在trello:https://trello.com/card/improve-server-side-performance-of-subscriptions/508721606e02bb9d570016ae/10
上很快就会看到缓存 DDP仍处于pre1版本中,但我认为这将在未来进一步优化,尤其是在每个订阅上可能不是唯一的查询(即Documents.find()
而不是{{1 }}。)
有关DDP协议的完整规格,请查看:https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md