通过 20-30 GB 的多个日志文件搜索模式的最快方法是什么
What is the fastest way to search for patterns through 20-30 GB of multiple logfiles
我正在执行日志分析,我想将其自动化,以便它每天运行并报告结果。分析在标准工作站、8 核、高达 32 GB 的可用 RAM 上运行。原型设计基于 GNU Grep (--mmap)、Sqlite(在 RAM 磁盘上)和 Bash(用于参数)。
一个问题是我需要多次浏览这些文件。如果我找到模式匹配,我会向上搜索相关的东西。这可能会递归并且每次重新读取千兆字节的数据。
C 中是否有用于内存支持的分段智能多线程文件的快速方法/库 reading/writing?
当我查看 "in memory" 搜索(在已加载的片段中上下移动,或者在必要时加载更多内容)时,我觉得这是一个非常普遍的要求。
查找 Sean O'Rourke 编写的 Tim Bray's Wide Finder Project. It has surprisingly simple and versatile solution in Perl。它会将日志映射到内存中,然后派生子进程进行搜索。事实上,您可以在每个子进程中访问整个日志文件,因此您可以灵活地跨初始分区前进和后退,这使得它非常通用。你可以用同样的方式在 C 中完成,但我建议先使用 Perl 来测试这个概念,如果你不满意,然后再用 C 重写。就我个人而言,我会从 Perl POC 转到 Erlang + C NIF 只是因为我的个人喜好。 (WF 项目中的 Erlang 解决方案不使用 NIF。)
或者,如果您有很多钱可以负担得起 splunk>
,那就行了。
我正在执行日志分析,我想将其自动化,以便它每天运行并报告结果。分析在标准工作站、8 核、高达 32 GB 的可用 RAM 上运行。原型设计基于 GNU Grep (--mmap)、Sqlite(在 RAM 磁盘上)和 Bash(用于参数)。
一个问题是我需要多次浏览这些文件。如果我找到模式匹配,我会向上搜索相关的东西。这可能会递归并且每次重新读取千兆字节的数据。
C 中是否有用于内存支持的分段智能多线程文件的快速方法/库 reading/writing?
当我查看 "in memory" 搜索(在已加载的片段中上下移动,或者在必要时加载更多内容)时,我觉得这是一个非常普遍的要求。
查找 Sean O'Rourke 编写的 Tim Bray's Wide Finder Project. It has surprisingly simple and versatile solution in Perl。它会将日志映射到内存中,然后派生子进程进行搜索。事实上,您可以在每个子进程中访问整个日志文件,因此您可以灵活地跨初始分区前进和后退,这使得它非常通用。你可以用同样的方式在 C 中完成,但我建议先使用 Perl 来测试这个概念,如果你不满意,然后再用 C 重写。就我个人而言,我会从 Perl POC 转到 Erlang + C NIF 只是因为我的个人喜好。 (WF 项目中的 Erlang 解决方案不使用 NIF。)
或者,如果您有很多钱可以负担得起 splunk>
,那就行了。