【问题标题】:Share a MongoDB instance between Meteor apps without lag in reactivity?在 Meteor 应用程序之间共享 MongoDB 实例而不会延迟反应?
【发布时间】:2015-07-24 00:07:29
【问题描述】:

这个问题已经被问过多次,herehere,得到这个工作的答案是相当直接的:向你的 bash_profile 添加一个环境变量,你本地主机上的所有 Meteor 实例将共享那个 MONGO_URL。

然而,我注意到的是,虽然可能是这种情况,但 Meteor 的“反应性”存在相当多的延迟。我已经用两个非常精简的 Meteor 应用程序对此进行了测试,其中包含空集合。从一个 Meteor 应用程序将文档插入到集合中,我的第二个应用程序正在查询同一个集合并从文档中打印出一个字段确实工作,但在更新之前存在明显的滞后。我已经排除了集合插入是滞后源的可能性(第一个应用程序客户端上的简单 console.log 回调,记录新插入文档的 id)。

我让多个应用程序(准确地说是两个)共享同一个 MongoDB 的目的是将管理面板与移动应用程序分开,而不会因为名称间距和膨胀而发疯。此配置有效,但我不确定它是否是完成任务的“正确”方式,而且它似乎肯定会导致性能下降。

任何对此问题的见解将不胜感激。谢谢!

编辑:澄清一下,我使用的数据库 URL 位于我的本地主机上,而不是在线托管的东西。

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    当您使用外部数据库时,默认情况下,meteor 将使用定期轮询(每隔几秒)以观察任何变化。您遇到的延迟是此轮询过程的结果。您可以利用meteor 的oplog tailing 功能消除延迟并减少应用程序的CPU 使用率。为了使用它,您将:

    1. 在打开 oplog 的情况下访问 mongodb 实例。
    2. 设置环境变量MONGO_OPLOG_URL,以便您的应用可以读取操作日志。

    就个人而言,我会为此推荐compose.io。他们正是将这一点作为其基本弹性部署的一部分提供。有关详细说明,请参阅this post


    对于希望连接到本地为您创建的 oplog 的用户,您可以通过以下方式获取 URL:

    MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle._oplogUrl
    

    它最终应该看起来像 mongodb://127.0.0.1:3001/local

    【讨论】:

    • 嗨,大卫,感谢您为我指明了方向。当我准备好部署时,Compose 看起来像是我可以使用的东西。至于本地配置 - MONGO_OPLOG_URL 是否与 MONGO_URL 相同?
    • 这必然是一个不同的 URL。请参阅我的答案的更新,了解本地版本的外观。
    • 我不知道为什么我不能让它第一次工作。但我在一分钟前设法做到了。启动了第一个流星实例,然后export MONGO_URL='mongodb://127.0.0.1:3001/meteor' export MONGO_OPLOG_URL='mongodb://127.0.0.1:3001/local' 修改了我的bash 配置文件,并将meteor add facts 包添加到两个流星应用程序中,最后看到“observe-drivers-oplog”列在两者下。优秀。非常感谢大卫!
    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 2017-05-20
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多