database - meteor 一次或 "static"发布没有收集跟踪

标签 database meteor publish-subscribe

假设需要将包含 10,000 个文档的相同集合发送给 Meteor 应用的每个客户端。

在高层次上,我知道服务器为每个客户端订阅做一些簿记 - 也就是说,它跟踪订阅的状态,以便它可以为客户端发送适当的更改。但是,如果每个客户端都有相同的大型数据集,其中每个文档都有很多字段,那么这将是非常低效的。

好像有used to be a way to send a "static" publish down the wire ,其中发布了初始查询并且再也没有更改过。这似乎是一种更有效的方法。

在当前版本的 Meteor (0.6.5.1) 中是否有正确的方法来执行此操作?

编辑:澄清一下,这个问题与客户端 react 无关。这是关于减少服务器端跟踪客户端集合的开销。

相关问题:Is there a way to tell meteor a collection is static (will never change)?

更新:事实证明,在 Meteor 0.7 或更早版本中执行此操作会导致一些严重的性能问题。参见 https://stackoverflow.com/a/21835534/586086了解我们如何解决这个问题。

最佳答案

http://docs.meteor.com/#find :

Statics.find({}, {reactive: false} )

编辑以反射(reflect)评论:

你有一些信息表明 reactive: false 参数只是客户端吗?你可能是对的,这是一个合理的,也许是可能的解释。我没有时间检查,但我认为这也可能是服务器端指令,表示不轮询 mongo 结果集。愿意学习...

你说

However, this is horribly inefficient if each client has the same large data set where each document has many fields.

现在我们可能正在讨论服务器代码的效率,以及它轮询 mongo 源以获取服务器外部发生的更新。请再提出一个问题,这远远超出了我的回答能力!我怀疑每个连接的客户端都会发生一次,更可能是应用程序服务器信息和 mongo 服务器之间的同步。

你发出的客户请求,包括排序,都应该被标记为非 react 性的。这与您是否可以向它们发出排序指令,或者它们是否可以通过其他 react 重新触发是分开的,但不需要包括到服务器的行程。一旦每个文档到达客户端,它就会被缓存。你仍然可以做任何 minimongo 做的事,没有能力损失。没有客户端询问服务器是否有更新,您不需要关闭它。服务器仅在需要时推送。

关于database - meteor 一次或 "static"发布没有收集跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18821014/

相关文章:

mysql - 警告 : mysql_pconnect(): MySQL server has gone away with using cloud database

python - 使用 Python 在 PostgreSQL 数据库上进行快速复杂的 SQL 查询

MySQL : InnoDB_Force_recovery = 1 leads to table in read only

javascript - 为什么我们应该在这里使用 Observer/Pub-Sub 模式?

mysql - 可接受的 url 长度存储为唯一的 MySql/PHP

reactjs - React - 无法读取未定义的属性

facebook - Meteor + accounts-facebook 重定向到错误的 url

javascript - 如何使用 Meteor 在 Mongo 中插入 N 个元素到文档中

go - 如何使用GCP在pubsub模型中一次向所有订阅者发送消息

python - 使用 redis-py 更改 PubSub 订阅