什么是做在一个大文件的搜索最好的方式?(What is the best way to do a s

2019-09-21 16:25发布

我期待一个KMP(或类似)搜索适用于大型文件(> 4GB)。

我期待这给我though.I不能把它全部复制到内存,因为没有足够的空间存在问题。

我的问题是,什么是去这样做搜索的最佳方式? 我应该简单地创建一个文件*,并在文件中直接进行搜索,我要复制块(比如4K)内存和搜查,或别的东西完全?

Answer 1:

如果您使用的是支持它的平台,您可以使用mmap()。 该文件的分页也是一种可能性,但记得要保持缓冲区尽可能大,以减少IO开销,并且是两页边界之间小心(假设一个字符串匹配,而是由页边界分裂)

另外,我建议你建立某种类型的索引,使用索引来限制搜索。 KMP搜索不是特别有效。 当然,这取决于你的文件的性质,创建方式, 等等。



Answer 2:

对于文件的访问,我会建议使用内存映射文件,以避免数据复制。 这是UNIX机器上微不足道。 您可能需要的文件映射分割成更小的块,如果它不能在一个块进行分配。 如果你有兴趣,我可以提供一些代码。

对于搜索我会建议使用的博耶更多的搜索算法 。



Answer 3:

直接在文件中搜索会很慢,使用缓冲会给更好的性能。 但请注意,您的缓冲区必须比你搜索什么(大SearchLength ),当然,你必须刷新缓冲区时被SearchLength其年底前字节。



Answer 4:

最好的办法是在块读取它和搜索。 你应该把块大小的参数,这样你就可以找出最好的性能试验。

然而,它通常是更有效的尝试和索引文件以某种方式,让你不必线性在整个文件中搜索做。 例如,KMP是一个字符串搜索算法 - 你只是寻找一个字的occuences? 然后,你可以创建词的哈希表(在磁盘上)及其在文件中的位置,并有非常有效的搜索。



文章来源: What is the best way to do a search in a large file?
标签: c file search io