在大文本日志文件中搜索

时间:2010-05-19 11:27:23

标签: java text-files

假设您有一个游戏服务器,可以创建游戏玩家操作的文本日志文件,并且您不时需要在这些日志文件中查找某些内容(例如调查诈骗或丢失项目)。例如,您有100个文件,每个文件的大小在20MB到50MB之间 - 您如何快速搜索它们?

我已经尝试做的是创建几个线程,每个invidual线程将他自己的文件映射到内存(假设内存不应该是问题,如果它不超过500MB的ram)在这里执行搜索,结果是1左右每个文件第二个:

文件:a26.log - 读入:0.891,行:625282,匹配:78848

有更好的方法吗? - 因为在我看来有点慢。 感谢。

(java用于这种情况)

5 个答案:

答案 0 :(得分:2)

Tim Bray正在调查处理Apache日志文件的方法:http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder

似乎可能与您的情况有很多共同之处。

答案 1 :(得分:1)

您可以使用Unix命令组合 find grep

答案 2 :(得分:0)

当然有更好的方法:在搜索之前索引内容。索引的方式取决于您希望如何搜索日志,但一般情况下,如果日志条目可以轻松地重新构建为xml文档,则可以使用Lucene(或Solr。 / p>

如上所述的工具中的性能和资源使用优化量应该比特定解决方案提供更好的性能。

这是假设您多次搜索每个文件。如果不是这种情况,您也可以grep文件并完成它。

答案 3 :(得分:0)

对于大文本文件的临时搜索,我会使用UNIX grepfgrepegrep实用程序。它们已经存在了很长时间,并且已经受益于许多人的工作,使它们变得快速。

另一方面,搜索文本文件(之前没有编入索引)的最终瓶颈将是应用程序+操作系统将数据从光盘文件移动到内存中的速度。你似乎每秒管理20M字节或更多,这似乎相当快......我也是。

答案 4 :(得分:0)

我应该提一下,在第一篇文章中,游戏服务器是针对Win64x编写的 - 我想知道它是否在像grep for Windows和unix一样的性能级别上?