【问题标题】:Meteor publishing and subscribing to a large CollectionMeteor 发布和订阅大型收藏
【发布时间】:2016-06-20 12:26:06
【问题描述】:

让我们以这个场景为例,在电子商务应用程序中,用户搜索“手表”。

我是否建议发布和订阅整个 Products 集合?因为那张桌子我长大了很多。我可以在不订阅的情况下从集合中获取吗?

另外,在 Meteor 1.3 中,哪个是定义集合的最佳位置?根据我的阅读,它必须在 /imports/api,但稍微了解一下可能会有所帮助。

谢谢,

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    当您想将数据发送到您的流星客户端时,您有三个选项 - 选择您自己的冒险。

    选项 1:发布整个集合

    优点:易于实现,数据到达后在客户端上快速使用/过滤,发布可以在服务器上为所有客户端重用

    缺点:不能很好地扩展/不能超过几千个文档,可能很多要传输给客户端

    在什么时候使用:你有一个小规模的有界集合,客户端需要所有这些来过滤/搜索/选择

    选项2:使用方法

    您可以让流星方法将过滤后的文档传递给客户端,而不是发布它们。 IE。用户搜索“手表”,该方法只提供那些文件。有关详细信息,请参阅this section of the guide。如果您愿意,您可以将文档放入本地集合中,但这不是必需的。

    优点:性能、可扩展性、数据隔离(您不必担心文档的某些子集是由另一个订阅添加的)

    缺点:与订阅相比,设置和管理工作量更大

    在什么情况下使用:您有一个无限的集合,并且您需要以最高效的方式使用一个子集

    选项 3:使用响应式订阅

    这与 (2) 非常相似,只是您将在更改搜索参数后重新订阅 autorun。详情请见this section

    优点:比(2)更容易实现

    缺点:计算量更大,但比 (2) 慢一点,可能例外是发布可以在服务器上重复使用(不太可能在搜索的情况下)

    在什么情况下使用:你有一个无限的集合,你需要一个工作量/代码最少的子集


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

    至于在哪里定义您的集合,请参阅 this sectiontodos app 示例。建议使用您提到的imports/api。有关原因的解释,请参阅this question。如果您需要更多详细信息,我建议您打开一个单独的问题。

    【讨论】:

      【解决方案2】:

      一般来说,我们不会一次将所有获取的数据发布到页面上。就用户体验而言,这对客户来说太长了。一个常见的建议是分页加排序。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-30
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        相关资源
        最近更新 更多