0

Meteor 是否能够在服务多个不同用户的同时保持高性能?

例如,如果我声明以下出版物,它只允许用户检索他们自己的文档:

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

想象一下,成千上万的用户正在从该出版物中获取信息,每个用户都在为自己的文档提供信息。当一个文档被更新时会发生什么?即,是否所有用户都通知他们的列表可能已更改?服务器是否为所有可能的用户执行查询并只通知那些重要的用户?Meteor 如何在这种情况下保持性能?

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

4

1 回答 1

1

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

Meteor 会将对集合的任何更改发送到该特定订阅。订阅者不会被告知文档可能已更改,他们只是发送了数据更改。DDP 有一种“粗鲁”,它告诉客户端该做什么,即删除、更新、插入..

在上述情况下Documents.find,该特定用户只会收到他们的更新,而其他用户根本不会收到通知。

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

DDP 仍处于 pre1 版本中,但我想这将在未来进一步优化,特别是在每个订阅中不太可能唯一的查询(即Documents.find(),而不是Document.find({user:this.userId}).)

有关 DDP 协议的完整规范,请查看:https ://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md

于 2013-04-06T09:11:52.540 回答