Meteor发布和订阅大型集合

时间:2016-06-20 00:52:08

标签: mongodb meteor

因此,让我们采用这种方式,在电子商务应用程序中,用户搜索"手表"。

我建议发布和订阅整个产品系列吗?因为那张桌子我的成长很多。我是否有可能从订阅中获取而不订阅它?

此外,在Meteor 1.3中,哪个是定义集合的最佳位置?从我读到的内容来看,它必须在/imports/api中,但对它的一些启示可能会有所帮助。

谢谢,

2 个答案:

答案 0 :(得分:5)

当您想要向流星客户端获取数据时,您有三种选择 - 选择自己的冒险。

选项1:发布整个集合

专业人员:一旦数据到达,便于实施,快速使用/过滤客户端,可以在服务器上为所有客户端重复发布

缺点:不能很好地扩展/没有工作超过几千个文档,可能需要传输到客户端很多

时使用:您有一个规模较小的集合,而客户端需要所有这些集合来过滤/搜索/选择

选项2:使用方法

您可以使用meteor方法将过滤后的文档传送到客户端,而不是发布它们。即用户搜索"腕表",该方法仅提供那些文件。有关详细信息,请参阅this section of the guide。如果您愿意,可以将文档填充到本地集合中,但这并不是必需的。

专业人员:性能,可扩展性,数据隔离(您不必担心其他订阅添加了某些文档子集)

缺点:设置和管理比订阅更多

何时使用:您拥有无限制的集合,并且您需要以最高效的方式使用子集

选项3:使用被动订阅

这与(2)非常相似,除非您在更改搜索参数后在autorun中重新订阅。有关详细信息,请参阅this section

专业人员:比(2)

更容易实施

缺点:计算成本更高,比(2)慢一点,可能的例外是出版物可以在服务器上重复使用(在搜索的情况下不太可能)

时使用:您有一个无限制的集合,并且您需要一个努力/代码最少的子集

在不了解您的特定用例的情况下,我会选择(2)。

有关定义集合的位置,请参阅this sectiontodos app以获取示例。建议使用您提到的imports/api。有关原因的解释,请参阅this question。如果您需要更多详细信息,我建议您另外打开一个问题。

答案 1 :(得分:0)

一般来说,我们不会立即将所有提取的数据发布到网页上。在用户体验方面,它对客户来说太冗长了。一个常见的建议是分页加分类。

对于Meteor,服务器上的集合与客户端上的集合不同。简而言之,客户端上的集合是服务器集合的子集。该子集中的数据由Meteor的发布 - 订阅机制确定。数据在服务器上发布,您在客户端上订阅它。这样就可以得出子集。您可以根据您在客户端上使用的子集的内容和方式,定义过滤,排序,计数等来对派生子集进行整形。该文档包含一个相当不错的指南和有关Meteor collections的详细信息。

定义集合的地方在Meteor中非常灵活。它不一定是/imports/api。它可以是服务器和客户端都可以访问的任何位置,因为在一般情况下,服务器需要查看数据并定义操作集合的方法,客户端需要查看它以便在网页。但是,如上所述,它很灵活,取决于您如何实现和构建应用程序。它可以是服务器和客户端都可访问的位置,但它不需要。在某些情况下,集合仅在服务器上定义,客户端从隐式和间接协议中获取数据。 Meteor方法就是其中之一,而Restful API则是另一个。这是一个个案,你做你感觉最好的事情。这就是乐趣所在。订阅是常见且方便的,但不是唯一的。

Meteor分别为服务器和客户端上的文件夹访问定义了特殊规则,Meteor 1.3为调制规定了新的规则。我喜欢阅读Meteor文档并发现它们非常有用,例如this one有助于对上述规则有更深入的了解。