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

Rad*_*ghe 5 database logging mongodb cassandra

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

现在整个事情刚刚开始,但到目前为止这里是要求:

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

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

现在,存储对于所有机器来说都是常见的(并且很慢).因此,对于可伸缩性,我认为我们需要充分利用内存和多线程 - 以便分片有意义.

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

zzn*_*ate 5

稀疏的列式数据存储(如Apache Cassandra)非常适合聚合时间序列数据.有关示例,请参阅以下文章:


mil*_*lan 2

MongoDB 听起来确实很适合您的要求。原因如下:

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

您甚至可能会找到适当的配置以将其置于非分片设置中。例如,默认情况下,它每 60 秒同步到磁盘,这意味着 60 秒的写入将被缓冲,从而减少 IO。我已经在一台机器上对半 TB 的数据进行了尝试,并且单个索引字段查询的运行时间约为 cca 100-200 毫秒。