2010-05-19 37 views
3

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

我已经尝试做的是创建多个线程,每个线程将自己的文件映射到内存(如果它不超过500MB的内存不应该是内存问题)在这里执行搜索,结果是东西每堆1秒:

文件:a26.log - 阅读:0.891,行:625282,火柴:78848

有没有更好的办法那怎么办? - 因为在我看来有点慢。 谢谢。

(Java是用于这种情况下)

+0

快速搜索通常使用数据库来实现 – 2010-05-19 11:35:28

+0

这听起来不太慢,如果你只是偶尔做。将日志文件放置在多个磁盘或机器中可能会有所帮助,因为I/O似乎是此处的瓶颈。 – 2010-05-19 12:51:46

回答

0

当然有更好的办法:搜索之前,你的索引内容。您索引的方式取决于您想要如何搜索日志,但通常情况下,使用Lucene(或Solr,如果日志条目可以轻松地重构为xml文档)可能会很好。

上面提到的性能和资源使用优化量可以为您提供比临时解决方案更好的性能。

这是假设你多次搜索每个文件。如果情况并非如此,那么您不妨将这些文件完成。

+0

(对不起......我不小心编辑了错误的答案,还原了。) – 2010-05-19 12:48:01

0

对于临时搜索大型文本文件,我会使用UNIX grepfgrepegrep实用程序。他们已经有很长一段时间了,并且有很多人为了让他们快速工作而受益。另一方面,搜索文本文件(以前没有编入索引)的最终瓶颈将是应用程序和操作系统将数据从光盘文件移动到内存中的速度。你似乎在管理每秒20MB或更多,这似乎相当快...我也是。

1

您可以使用Unix命令组合与找到grep

0

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