我最近发现了Meteor,我真的很喜欢它为编写新应用程序带来的简单性。我的问题是:你如何将它连接到现有的后端?我们有大量现有的Clojure代码,也与MongoDB一起运行。我想做的是使用Meteor构建我的应用程序的前端。我想我可以将我的Meteor应用程序直接连接到后端的MongoDB实例,但这似乎不是一个好习惯...或者是它?
我想到的另一个选择是从webapp或Clojure代码访问数据库,并使用队列机制或套接字在两者之间创建单独的通信方式。任何有关文档的提示或指针都会有所帮助!
答案 0 :(得分:4)
查看Meteor的环境变量设置。通过设置这些变量,您可以轻松定义外部MongoDB实例。特别是它将是
$export MONGO_URL="mongodb://yourmongodbserver/your-db"
对于这个特定主题https://eventedmind.com/feed/sg3ejYnmhxpBNoWan,有一个关于eventedmind.com的截屏视频,这非常资源丰富。
答案 1 :(得分:3)
关于“如何”指出它们,@ Michael的answer是现货;只需将Meteor Web服务器指向同一个MongoDB。
关于你是否应该,这取决于你的情况。让一切都运行在同一个数据库中当然可以简化事情。
拥有单独的dbs可能会减少db层的负载,因为您可以有选择地选择在clojure和Meteor dbs之间复制哪些写入/更新。
任何一种方法的一个问题是变更通知的速度。目前,Meteor服务器每隔10秒轮询数据库以识别更改。令人高兴的是,一旦oplog分支合并到主服务器,它将大大提高数据库中外部更改(而不是直接通过Meteor服务器)在Meteor客户端中反映的速度。 oplog支持将使Meteor服务器能够模拟副本集实例,拖尾oplog,这意味着几乎即时通知db更改。
将队列用作中间件层会增加复杂性并增加另一个故障点。它还会增加通知的延迟。但是,这些问题可以减轻,并且未来可能还有其他基础架构可以从这样的中间件队列中受益。例如,其他感兴趣的系统可以向队列注册以接收更改通知,而无需查询或需要了解您的数据库。您还可以单独扩展MongoDB实例并调整队列以确定“最终”保证中“最终”的含义。
我认为要问的问题是:
关于可能的队列技术,我听说RabbitMQ非常好。 Clojure NYC聚会的Oct. 2013 talk包括由于SQS的延迟问题而从Amazon SQS切换到RabbitMQ的描述,并且传闻RabbitMQ对他们来说是坚如磐石的。