【问题标题】:Meteor Publish/Subscription Lag TimeMeteor 发布/订阅延迟时间
【发布时间】:2014-02-14 00:19:37
【问题描述】:

我正在使用d3 在图像上绘制具有 x 和 y 坐标的流星集合(Hostiles)。我可以成功地做到这一点。但是,我有一个发布功能,可以检查用户登录是管理员还是普通用户。如果用户是管理员,它使用 d3 绘制所有点,但当它是任何其他用户时,它只绘制特定于用户位置的点。

//Base Publish on User Type
if (user === true) {
  //Admin Return all Points
  return Hostiles.find();
} else {
  //Any other user returns location specific points 
  return Hostiles.find({latitude: {$lte: xLoc + 80, $gte: xLoc - 80}, longitude: {$lte: yLoc + 80, $gte: yLoc - 80}});
};

所有这些都可以正常工作。当我更改Hostile 位置的xLocyLoc 时,就会出现问题。当管理员登录时,重绘与集合的更改是即时的。但是,当普通用户登录时,重绘会有延迟。这个 d3 重绘通常需要大约 3-10 秒。在客户端上,我的订阅和 d3 都绘制在 Meteor.autorun(function() { 中。也许没有办法解决这个问题?谢谢。

【问题讨论】:

  • 我假设xLocyLoc 是从Session 中检索到的?因为如果它们不是,那么 autorun 只会在其他一些反应性数据源发生变化时执行(或者如果光标中的数据发生变化,则每 10 秒执行一次,这可能就是您所看到的)。
  • 阅读 Meteor 博客上的这篇文章:meteor.com/blog/2013/12/17/… - MongoDB 的 oplog 的当前实现仅支持针对标量字段的相等性检查。所有其他操作(例如您的 lte/gte 检查)仍使用旧的 10 秒轮询/差异方法。这将在 1.0 之前发生变化,因为 Meteor 团队在 oplog 实现中添加了更多操作符。
  • @musically_ut 它们是使用 Session 接收的。
  • @Cuberto 这很有意义,谢谢。所以在 1.0 之前我必须处理 10 秒 poll/diff 方法?
  • @alanning 啊,不知道。我想知道oplog-with-operatorstemplate-engine-preview-10.1 是否有合并版本?

标签: javascript mongodb d3.js meteor


【解决方案1】:

“当前 MongoDB 的 oplog 实现仅支持对标量字段的相等性检查。所有其他操作(如您的 lte/gte 检查)仍使用旧的 10 秒 poll/diff 方法。这将在 1.0 之前更改,正如 Meteor 团队为 oplog 实现添加更多操作符。”-@Cuberto https://www.meteor.com/blog/2013/12/17/meteor-070-scalable-database-queries-using-mongodb-oplog-instead-of-poll-and-diff

但是,在未发布的开发分支上有一个解决方法。见https://github.com/meteor/meteor/wiki/Oplog-Observe-Driver。这允许使用 Minimongo 支持的任何不包含 $where 或 $near 的选择器。只需使用meteor --release oplog-with-operators。 感谢 @Cuberto 和 @alanning 提供的出色解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2016-11-29
    • 2017-11-30
    相关资源
    最近更新 更多