有利于将大日志存储在MongoDB或Hadoop中,以便在filer上存储分析与Zip文件?

时间:2013-01-25 08:11:19

标签: mongodb logging hadoop analytics

目前,我们存储了大量日志(30G /天x3机器= av.100G)的文件管理器。日志是压缩的。

搜索日志的实际工具是搜索相应的日志(根据时间范围),复制它们,解压缩它们,然后搜索xml以获取信息和显示。

我们正在研究制作类似spunk的工具来搜索日志的可能性(它是消息总线的输出:发送到其他系统的xml消息)。

依赖类似mongo的数据库有什么好处,而不是直接查询压缩的日志文件? 我们还可以索引数据库中的一些数据,让程序搜索目标zip文件...... 什么带来了mongodb ......或hadoop?

2 个答案:

答案 0 :(得分:1)

我曾在MongoDB工作过,目前正在研究Hadoop,所以我可以列出一些您可能感兴趣的差异。

  1. MongoDB需要您将文件存储为文档(而不是原始文本数据)。 HDFS可以将其存储为文件,并允许您使用自定义MapReduce程序来处理它们。
  2. MongoDB将要求您选择一个好的分片键,以便有效地在整个群集中分配负载。由于您存储日志文件可能很困难。
  3. 如果您可以将格式化的日志存储在MongoDB中的文档中,它将允许您在大量日志中以非常低的延迟查询数据。我的上一个项目是基于MongoDB的内置日志记录,与原始文本日志的MapReduce分析相比,分析速度极快。但是记录必须从头开始。
  4. 在Hadoop中,你有像Hive,HBase和Impala这样的技术可以帮助你分析文本格式的日志,但是需要牢记MapReduce的延迟(尽管有很多方法可以优化延迟)。
  5. 总结一下:如果你可以在整个堆栈中实现基于mongoDB的日志记录去MongoDB,但如果你已经有了文本格式日志,那就去Hadoop吧。如果您可以实时将XML数据转换为MongoDB文档,那么您可以获得非常有效的解决方案。

答案 1 :(得分:0)

我对Hadoop的了解有限,所以我将专注于MongoDB。

您可以将每个日志条目存储在MongoDB中。在时间字段上创建索引时,可以轻松获得特定的时间范围。 MongoDB will have support for full text search in version 2.4这对于您的用例肯定是一个有趣的功能,但它还没有生产就绪。在那之前,搜索子串是一个非常缓慢的操作。因此,您必须将与搜索相关的XML树转换为mongodb对象,并为搜索次数最多的字段创建索引。

但是你应该知道将日志存储在MongoDB中意味着你将需要更多的硬盘空间。 MongoDB不会压缩有效负载数据,也会增加一些自己的元数据开销,因此它需要比解压缩日志更多的磁盘空间。此外,当您使用新的文本搜索功能时,它将占用更多的磁盘空间。在我看到的演示文稿中,文本索引是索引数据的两倍。当然,这个功能仍在进行中,但我不会打赌它在最终版本中会少得多。