MongoDB适用于Log Analysis Project

时间:2014-02-10 07:29:53

标签: c++ qt mongodb

我的项目是使用C ++ Qt编程进行日志分析(开发用于日志分析的新工具,现有工具,如appache日志查看器)。有不同的日志文件可用,每个文件都有不同的格式。在我的项目中首先提取不同的来自日志文件和第二次分析的字段。我为这个应用程序选择了NoSQL数据库MongoDB。我怀疑它是否适合这个应用程序? 我不知道MOngoDB。在Qt编程MongoDB的任何问题?

2 个答案:

答案 0 :(得分:1)

在您的情况下,MongoDB和其他文档存储(例如,简单的键值存储)的一个优点是它允许您在每个日志文档中包含结构化数据,提供各种类型的软模式,即一旦您的商店中已有数据,您可以有效地修改的模式,如果新输入日志格式可以使某些新字段可用。文档存储还允许您根据各个字段有效地查询数据,就像使用RDBMS一样。

但是,您的数据仅附加(因为它是日志数据,较新的数据不会使旧数据无效),这会产生性能影响:理论上,写入新数据不应阻止读取现有数据。 MongoDB的并发机制不支持此行为,因为锁定是按数据库完成的: http://docs.mongodb.org/manual/faq/concurrency/ 因此,从理论上讲,具有更精细锁定方法的另一个DB系统在处理同时读取和写入时可能更有效。

完整的性能分析取决于更多,包括您的数据集和查询,因此这在实践中可能无关紧要。基本上,你需要测试

可以在此处找到接近此主题的问题(遗憾的是未答复):Which NoSQL database best for append only audit logging use case?

答案 1 :(得分:1)

我想这取决于你将如何使用这些日志,以及你要存储多少日志。您提到了申请的两个目的:

  1. 提取并存储日志数据。
  2. 分析日志。
  3. 对于第一个,它完全没问题。与传统的RDBMS相比,MongoDB存储数据的优点是:

    1. 这很快。默认情况下,MongoDB使用内存进行写入缓存(您可以将其关闭)。
    2. 它很灵活。大多数RDBMS在达到1000万条记录时通常会变慢。但是,MongoDB能够在不需要太多额外工作的情况下分发数据。它可以存储和分析大量日志。
    3. 然而,谈论分析,并不是MongoDB的强项。阅读讨论here。 MongoDB能够分发数据并使用一组服务器对其进行分析,从而可以分析RDBMS无法处理的大量数据。但它意味着它会更快。目前MongoDB的Map / Reduce有其自身的局限性。当然,您可以添加更多分片服务器以加快速度。虽然可以很省钱。

      另一个问题是目前MongoDB不支持全文搜索(在即将发布的2.6版本中它只是new feature,但现在还不支持)。然后,如果你想按关键字搜索,那就会很慢。

      我上面谈到的两个问题是基于你要使用MongoDB提供的分发功能这一事实。如果不是,您可以使用C ++枚举日志并逐个分析记录。在这种情况下,MongoDB提供了一些非常好的功能,称为capped collectionTTL index,这可以节省您删除过期数据的时间。阅读文档以获取更多信息。

      总之,嗯,实际上没有结论。你选择什么取决于你将要做什么以及你将如何做。介意提供更多信息,以便我们可以更进一步?