【问题标题】:Does projection make Meteor observeChanges more performant?投影是否使 Meteor observeChanges 的性能更高?
【发布时间】:2014-11-10 01:48:33
【问题描述】:

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

我想知道如果在已投影的游标上调用 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 中的文档至少有另一个属性在某个时候发生了变化。)

【问题讨论】:

  • 以后我建议你不要发布coffeescript代码。转换后的输出对于非咖啡脚本程序员来说更具可读性。

标签: mongodb meteor


【解决方案1】:

一般来说,无论您是否直接使用observeChanges,如果您在发布函数中限制find 请求的字段,您的应用程序性能会更高,因为它:

  1. 从底层数据库中获取的数据更少(带宽)
  2. 向连接的客户端推送更少的数据(带宽)
  3. 维护较小的共享结果集(内存)

如果您使用oplog tailing,我不确定限制字段是否能显着节省计算量。我的直觉是它必须有所帮助,因为驱动程序可能会跳过对未观察到的字段的任何更改——我只是不知道这种影响有多大。

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

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

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多