2

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

搜索该日志的实际工具是搜索相应的日志(根据时间范围),将它们复制到本地,解压缩它们,然后在 xml 中搜索信息并显示。

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

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

4

2 回答 2

1

我曾在 MongoDB 上工作,目前在 Hadoop 上工作,因此我可以列出一些您可能会感兴趣的差异。

  1. MongoDB 将需要您将文件存储为文档(而不是原始文本数据)。HDFS 可以将其存储为文件,并允许您使用自定义 MapReduce 程序来处理它们。
  2. MongoDB 将要求您选择一个好的分片键,以便在集群中有效地分配负载。由于您正在存储日志文件,因此可能会很困难。
  3. 如果您可以将格式化的日志存储在 MongoDB 中的文档中,它将允许您在大量日志中以极低的延迟查询数据。我的上一个项目有基于 MongoDB 的内置日志记录,与原始文本日志的 MapReduce 分析相比,分析速度非常快。但是必须从头开始进行日志记录。
  4. 在 Hadoop 中,您拥有 Hive、HBase 和 Impala 等技术,它们将帮助您分析文本格式日志,但需要牢记 MapReduce 的延迟(尽管有一些方法可以优化延迟)。

总结一下:如果您可以在整个堆栈中实现基于 mongoDB 的日志记录,请选择 MongoDB,但如果您已经拥有文本格式的日志,则选择 Hadoop。如果您可以将您的 XML 数据实时转换为 MongoDB 文档,那么您可以获得一个非常有效的解决方案。

于 2013-01-25T17:36:15.443 回答
0

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

您可以将每个日志条目存储在 MongoDB 中。当您在时间字段上创建索引时,您可以轻松获取特定的时间范围。MongoDB 将在 2.4 版中支持全文搜索,这对于您的用例来说肯定是一个有趣的功能,但它还没有准备好生产。在那之前,搜索子字符串是一个非常缓慢的操作。因此,您必须将与您的搜索相关的 XML 树转换为 mongodb 对象,并为搜索最多的字段创建索引。

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

于 2013-01-25T10:29:35.580 回答