【问题标题】:publish/subscription with big data Collection使用大数据收集发布/订阅
【发布时间】:2013-12-07 00:55:14
【问题描述】:

我有一个非常大的集合(约 40000 个文档,包含约 20-25 个字段,包括包含约 500 个项目的数组字段)和约 2000 个订阅者(他们现在只是机器人)。

因此,当用户订阅整个集合(不包括服务器发布中的某些字段)并将 Collection.find 与自定义过滤器、排序和顺序一起使用时,客户端的工作真的很辛苦

我尝试使用带有选项的发布:即客户端定义的过滤器等。但在这种情况下,我在服务器上有太多内存泄漏,几个小时后史诗般的失败:)。

任何人都可以为这种集合提供一些发布-订阅模式吗?我不要求明确的解决方案,而是一些有用的想法

谢谢

【问题讨论】:

  • 您所说的内存泄漏......知道它们可能来自哪里吗?您说,您正在使用带有客户端定义过滤器的订阅。您确定当用户更改过滤器时您的订阅会被取消吗?
  • 是的,所有订阅都按预期进行。但是我想当订阅的选项发生变化时,垃圾收集器的工作量很大。如果我有 2000 个具有不同选项(即过滤器)的用户,那就像我有 2000 个不同的订阅
  • 不错的实验顺便说一句。如果您是第一批在如此重的负载下测试 Meteor 的人之一,我不会感到惊讶。
  • 哈!现在我害怕流星的生产。
  • 您能否更准确地定义您在此处描述的测试用例。我对您正在运行的服务器的数量/类型以及每台服务器同时连接的客户端数量等细节感兴趣。此外,典型的客户端需要从服务器获取多少数据?你说的“几个小时后”到底是什么意思? :)

标签: meteor


【解决方案1】:

你可能想试试https://github.com/alethes/meteor-pages

它有:

增量订阅。只下载需要的东西,而不是一次下载整个集合。适用于大型数据集。

【讨论】:

    【解决方案2】:

    不要发布所有文档。仅发布您想要显示的文档并使用分页。我想写一篇关于 Meteor 分页的教程,但我现在没有太多时间。

    使用 Iron Router 及其 waitOn 函数进行客户端订阅。

    Router.map(function () {
       this.route('postShow', {
          path: '/posts/:page',
    
          before: function() {
             Session.set('page', this.params.page);
          },
    
          waitOn: function () {
             //how many documents we want to per page
             var perPage = 50;
             return Meteor.subscribe('posts', {}, {
               //limit
               limit: perPage,
               //we need to compute how many documents to skip
               skip:  perPage * Session.get('page') - perPage
             });
          },
    
          data: function() {
             return {
                //variable posts available for Handlebars: {{#each posts}}...
                posts: Posts.find()
             }
          } 
       });
    });
    

    然后发布:

    Meteor.publish('posts', function(params, opts) {
       return Posts.find(params, opts);
    });
    

    【讨论】:

    • 我明白了。我猜这是常见的解决方案。在这种情况下,服务器端发布会占用大量资源和内存。通过“实时搜索”,重新订阅并从光标获取数据需要很长时间(我的意思是当时有 2000 个用户)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多