投影是否会使Meteor的观察变化更加高效?

时间:2014-11-08 23:09:29

标签: mongodb meteor

我想观察一个或两个的变化,但绝对不是文档的所有属性。

我想知道如果在已投射的光标上调用observeChanges函数是否会更高效?

没有投影

MyCollection.find().observeChanges(
  changed: (_id, fields) ->
    if fields.myProperty?
      doMyFunctionality(fields.myProperty)
)

使用投影

MyCollection.find({}, myProperty: 1).observeChanges(
  changed: (_id, fields) ->
    doMyFunctionality(fields.myProperty)
)

(假设MyCollection中的文档至少有另一个属性在某个时候被更改。)

1 个答案:

答案 0 :(得分:1)

一般来说,无论您是否直接使用observeChanges,如果您在发布功能中限制find请求的字段,那么您的应用会更高效:

  1. 从底层数据库中获取较少的数据(带宽)
  2. 将更少的数据推送到连接的客户端(带宽)
  3. 维护较小的共享结果集(内存)
  4. 如果您使用oplog tailing,我不确定是否有任何显着的计算节省来限制字段。我的直觉是它必须有所帮助,因为驱动程序可能会跳过对非观察区域的任何更改 - 我只是不知道这种影响有多大。

    使用旧的poll-and-diff算法时,使用字段投影减少CPU是绝对正确的,因为它实际上区分了文档。要比较的字段越少,执行的效率就越高。

    有关其他详细信息,我建议您观看David Glasser的Making Mongo Realtime