我应该使用MongoDB吗?

时间:2013-06-05 16:07:19

标签: mongodb nosql

因此我们有一个系统,该系统将大量数据写入日志数据库。这些数据只有在出现问题时才会被读取,剩下的时间它就是为了以防万一。

此数据当前以以下结构存储在SQL Server DB中:

  • 写入“”DB
  • 的数据
  • 定期将其存档为单独的数据库
  • 数据保存7天
  • 目前每天写入SQL的数据高达100Gb
  • 数据很简单,没有连接等,只是通过外键链接的平面数据

所以我认为这会更有效地存储在NoSQL系统中,例如MongoDB

据我所知,通过阅读多篇文章(例如herehere),这具有以下优势

  • 水平缩放
  • 快速写作
  • 符合数据的非结构化性质
  • 不关心读取性能,只是写性能和空间

所以我的问题主要是我们认为合适吗?

Particuarly

  1. 对于比较SQL的等价物,Mongo是否在磁盘上占用更多或更少的空间?
  2. 删除的效率是否比SQL更高或更低?
  3. 使用水平扩展是否会占用大量网络流量?

2 个答案:

答案 0 :(得分:2)

根据我的经验,Mongo对写作表现不错,但并不引人注目。在以前的工作中,我们的生产实例在写入比阅读方面更加困难。

Mongo 非常积极分配磁盘上的文件。阅读:http://docs.mongodb.org/manual/faq/storage/#why-are-the-files-in-my-data-directory-larger-than-the-data-in-my-database

即使您的数据库为空,Mongo也会一次尝试获取2GB。

根据我的经验,我发现删除非常有效。没有真正的抱怨,但我们再次没有删除大量数据。

根据我的经验进行横向缩放是相当繁琐的,但它必须是复制数据。要阅读的内容是使用副本集或使用分片之间的区别。两者之间的复制模型/网络活动非常不同。

我们使用Mongo主要用于高效读取,并且它确实很好。

答案 1 :(得分:1)

如果您要存储日志记录数据,为什么不使用Logstash? Logstash使用Elasticsearch作为存储,写入和查询都非常快,并且可以很好地扩展。将Logstash与http://kibana.org/结合使用,您就拥有了自己的个人日志分析和查询仪表板。

MongoDB也不是一个糟糕的选择。一些非常好的日志和异常应用程序,如Errbit使用MongoDB作为后端。

当使用mongodb进行有力的日志记录时,它有助于将数据从您的应用程序发送到udp端口上的中间件,而udp端口又写入mongo。这样几乎有0等待写入发生。优点是,当udp端口接收数据并让您的应用程序恢复时,中间件可以对mongo进行安全写入,从而确保维护日志完整性。