【问题标题】:.NET: Message Queue vs directly inserting into MongoDB.NET:消息队列与直接插入 MongoDB
【发布时间】:2012-04-17 04:39:57
【问题描述】:

我有以下用例:Web 应用程序(实际上是客户端的浏览器)定期向 Web 服务器发送跟踪/ping(通过 XHR、JSON)。我将这些曲目存储在具有四个属性索引的 MongoDB 集合中。显然这个集合会增长得非常快。

我想到了三个选项:

  1. 只需处理 JSON 消息并插入 MongoDB。

  2. 获取 JSON 消息并生成一个后台任务以插入 MongoDB

  3. 处理 JSON 消息并将消息放入队列(RabbitMQ?!) 然后让队列消费者插入到 MongoDB 中。

哪一个在大型互联网用例中表现最好?我认为 2-3) 会产生严重的开销,因此在开发模式下会变慢,但我无法预测 2-3) 是否真的会更好地扩展。由于会有很多行并且有一个巨大的索引,我会说如果达到一定的限制,插入到 MOngoDB 集合中会很慢。

背景信息:保证每条消息/跟踪的处理并不重要,如果服务器出现故障,如果数据丢失也没关系。

【问题讨论】:

    标签: .net mongodb message-queue


    【解决方案1】:

    从我的角度来看,如果您的应用程序会承受非常高的开销 并且需要扩展我会选择具有以下优点的选项#3:

    1. 由于是异步方法,性能会更好。
    2. 是一种更成熟、更先进的解决方案,允许扩展(易于构建分布式架构)
    3. 更适合支持开销(考虑到 RabbitMQ 是用 Erlang 编写的,它的优势之一是并发性)。见http://en.wikipedia.org/wiki/Erlang_(programming_language)
    4. RabbitMQ 是经过验证的执行者,允许使用非持久队列。这意味着当服务器停止时,消息不会持久化并且会丢失。

    当然,这种方法增加了开发的复杂性,因为需要更多的控制(错误处理等)

    【讨论】:

      【解决方案2】:

      我的意见 - 选择 #1。单例插入 MongoDB 非常快。不需要队列或后端进程。另外,基于您缺乏严格的数据持久性,如果您的 MongoDB 在副本集中,您也可以在不开启 SafeMode 的情况下进行连接,以将开销降至最低。

      一些背景阅读 - Boxed Ice 的人们甚至 replaced their RabbitMQ implementation 使用 MongoDB。

      【讨论】:

      • 是的……这也是我的假设。只是想对我的问题有第二个看法。
      猜你喜欢
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2013-08-24
      • 2011-03-30
      • 2014-11-05
      • 2012-01-19
      相关资源
      最近更新 更多