我有一个具有这种格式的日志文件:
DATE-TIME ### attribute1 ### attribute2 ###attribute3
我必须在这个日志文件中搜索输入属性(从命令行输入)并输出与输入属性匹配的行。
一个天真的方法可能是这样的:
scan the entire file line by line search for the attribute print if found, else ignore.
这种方法很慢,因为它需要 O(n) 次比较,其中 n 是可能非常大的行数。
另一种方法可能是使用哈希表,但可能无法为大文件保留这样的内存中哈希表。
那么,最好的可行方案是什么?我怎样才能根据各种属性为整个文件编制索引?
编辑:
日志文件可能有 100K 行左右,几乎像 linux 上的系统日志文件。
在一次调用中,用户可以搜索多个属性,直到第一个属性的搜索像交互式控制台一样完成后才知道。
谢谢,
最佳答案
如果你只搜索一次,你不能比 O(n) 做得更好。
如果哈希索引太大而无法放入内存,请使用磁盘上的哈希,如 dbm或 gdbm .
编辑:我想指出,KeithB 建议的 Berkeley DB 工具在磁盘哈希上属于此类。 Berkeley DB 不是使用 SQL 的关系数据库。
关于c++ - 在 C/C++ 中搜索大文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210234/