Mongodb vs Cassandra用于聚合,搜索和分析许多日志

时间:2011-12-31 16:58:30

标签: mongodb logging cassandra database

我正在开发一个项目,将日志聚合和分析作为更大项目的一部分。我不知道选择哪个数据库来处理这些日志。我最近在MongoDB和Cassandra之间往返,但我确信还有其他人也适合我的需求。我应该选择哪一个?为什么?

现在一切都刚刚开始,但到目前为止这里有要求:

  • 日志采用syslog格式
  • 查询主要是在消息中现在的一个小字符串,但我会在一个单独的字段中获取它。并且还会有基于日期,严重程度或标记的过滤器。很少有人会在邮件中搜索随机字符串。
  • 来自某些日志条目的每小时分析
  • 将日志保留一段可配置的时间
  • 会有更多,我确定:)这就是为什么我认为NoSQL更合适,因为我们可以改变架构。

我们期望将数据库增长到一些TB数据(每秒约50K插入),因此必须进行分片。查询不常见,因为它们主要由较大项目的开发人员使用。但结果需要在几秒钟内返回。

目前,所有机器的存储都很常见(而且很慢)。因此,对于可伸缩性,我认为我们需要充分利用内存和多线程 - 为了使分片有意义。

我到目前为止所获得的基本思想是MongoDB具有更多功能,例如正则表达式或排序结果,并且更容易设置到合适的配置,而Cassandra似乎更具可扩展性(通过简单地添加服务器),以及还有一些简洁的功能,比如在数据上添加TTL。

2 个答案:

答案 0 :(得分:5)

稀疏的列式数据存储区(如Apache Cassandra)在汇总时间序列数据方面非常出色。有关示例,请参阅以下文章:

答案 1 :(得分:2)

MongoDB听起来非常适合您的要求。原因如下:

  • indices:由于您想要偶尔运行查询,因此不必在应用程序中维护它们或拥有单独的搜索应用程序(Lucene)。
  • 很好地扩展(内置分片支持,复制)
  • 写入是异步的(默认情况下,您可以使它们同步。),即非阻塞且快速。在某些故障情况下,您可能会失去一些,但对于日志和分析,它不会产生任何影响。
  • 相当强大的查询API(不像关系,没有连接,但比所有其他nosql键值存储更好,听起来比Cassandra提供的更强大。)

您甚至可以找到合适的配置,以便在非分片设置中使用它。例如,默认情况下,它每隔60秒同步到磁盘,这意味着将缓冲60秒的写入,从而减少IO。我在一台机器上尝试了半个TB的数据,一个索引的字段查询在cca 100-200ms内运行。