流星发布/订阅延迟时间

时间:2014-02-11 17:22:26

标签: javascript mongodb d3.js meteor

我正在使用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}});
};

所有这一切都很好。当我更改xLoc位置的yLocHostile时,会出现此问题。管理员登录后,重新绘制会立即显示集合中的更改。但是,当普通用户登录时,重绘会有滞后现象。这个d3重绘通常需要大约3-10秒。在客户端,我有我的订阅和d3在Meteor.autorun(function() {中绘制。也许没有办法解决这个问题?感谢。

1 个答案:

答案 0 :(得分: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

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