关于将它们指向相同的“如何”,@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 对他们来说是坚如磐石的。