2

所以我们有一个系统,这个系统将大量数据写入日志数据库。仅当出现问题时才会读取此数据,其余时间则以防万一。

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

  • 写入“写入”数据库的数据
  • 定期将其归档到单独的数据库中
  • 数据保留 7 天
  • 目前每天有多达 100Gb 的数据写入 SQL
  • 数据很简单,没有连接等。只是由外键链接的平面数据

所以我想这会更有效地存储在 NoSQL 系统中,比如MongoDB

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

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

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

特别是

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

2 回答 2

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 进行高效读取,它在这方面做得非常好。

于 2013-06-05T16:25:21.420 回答
1

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

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

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

于 2013-06-06T09:50:15.793 回答