【发布时间】:2010-02-05 20:34:41
【问题描述】:
我有一个具有这种格式的日志文件:
DATE-TIME ### attribute1 ### attribute2 ###attribute3
我必须在此日志文件中搜索输入属性(从命令行输入)并输出与输入属性匹配的行。
一种天真的方法可能是这样的:
这种方法很慢,因为它需要 O(n) 次比较,其中 n 是可能非常大的行数。
另一种方法可能是使用哈希表,但可能无法为大文件保留这样的内存哈希表。
那么,最佳可行的解决方案是什么?我怎样才能索引整个文件的各种属性?
编辑:
日志文件可能有大约 100K 行,与 linux 上的系统日志文件差不多。
在一次调用中,用户可能会搜索多个属性,直到像交互式控制台一样完成第一个属性的搜索后才知道。
谢谢,
【问题讨论】:
-
多少行,多少字节的数据?每次调用程序是否只有一次搜索,还是可以使用内存索引进行多次搜索?您可以对数据做出任何假设吗?您可以利用任何空间位置来索引文件中最常用的部分?
-
可能超过 100K 行,和 linux(var/log/messages) 的系统日志文件差不多。在一次调用中,可能会有不止一个搜索,但在不同的属性上。
-
缓慢、幼稚、未索引/未散列的版本需要多长时间?如果它的速度足以跟上交互式用户的步伐,则不必担心对其进行优化,除非您要扩展到数千或数百个用户。
-
仅仅 100K 行?对于
grep来说,这看起来不错,或者说是 NIH 综合症的可怕案例。
标签: c++ c file indexing search