8

我最近发现了 Meteor,我真的很喜欢它为编写新应用程序带来的简单性。我的问题是:你如何将它连接到现有的后端?我们有大量现有的 Clojure 代码,也与 MongoDB 一起运行。我想做的是使用 Meteor 来构建我的应用程序的前端。我想我可以将我的 Meteor 应用程序直接连接到后端的 MongoDB 实例,但这似乎不是一个好习惯……或者是吗?

我想象的另一个选择是从 webapp 或 Clojure 代码访问数据库,并使用队列机制或套接字在两者之间创建单独的通信方式。任何指向相关文档的提示或指针都会有所帮助!

4

2 回答 2

4

看看 Meteor 的环境变量设置。通过设置这些变量,您可以轻松定义外部 MongoDB 实例。特别是

$export MONGO_URL="mongodb://yourmongodbserver/your-db"

针对这个特定主题https://eventedmind.com/feed/sg3ejYnmhxpBNoWan有一个 eventedmind.com 的截屏视频,内容非常丰富。

于 2013-11-11T15:40:07.263 回答
3

关于将它们指向相同的“如何”,@Michael 的回答是正确的;只需将您的 Meteor Web 服务器指向同一个 MongoDB。

至于要不要,那要看你的情况了。让所有东西都运行在同一个数据库上肯定会简化事情。

拥有单独的数据库可以潜在地减少数据库层的负载,因为您可以有选择地选择在 clojure 和 Meteor 数据库之间复制哪些写入/更新。

这两种方法的一个问题是更改通知的速度。目前,Meteor 服务器每 10 秒轮询一次数据库以识别更改。令人高兴的是,一旦 oplog 分支合并到 master 中,它将大大提高在数据库中所做的外部更改(而不是直接通过 Meteor 服务器)在 Meteor 客户端中反映的速度。oplog 支持将使 Meteor 服务器能够模拟副本集实例,跟踪 oplog,这意味着几乎可以即时通知数据库更改。

使用队列作为中间件层会引入复杂性并增加另一个故障点。它还增加了通知的延迟。不过,这些问题可以得到缓解,并且将来可能会有其他基础设施部分受益于这样的中间件队列。例如,其他感兴趣的系统可以在队列中注册以接收更改通知,而无需查询或需要了解您的数据库。您还可以独立扩展 MongoDB 实例并调整队列以确定“最终”在“最终一致”保证中的含义。

我认为要问的问题是:

  • clojure 数据集和 Meteor 数据集之间有多少重叠
  • 您需要多快在两者之间反映更改
  • 随着您的成长,中间件队列在其他情况下是否有用

关于可能要研究的队列技术,我听说过RabbitMQ的好消息。2013年10 月在 Clojure NYC 聚会上的演讲中描述了由于 SQS 的延迟问题而从 Amazon SQS 切换到 RabbitMQ,而且据说 RabbitMQ 对他们来说是坚如磐石的。

于 2013-11-11T19:03:08.470 回答