【发布时间】:2017-04-06 20:26:29
【问题描述】:
我有一个 100GB 的随机文本字符串文件,长度在 4 到 200 个字符之间,每行一个。
我希望能够在文件中的任何字符串中找到一个字符串,例如如果可能的话,在“footestbar”中出现任何“test”。
否则我很高兴能够找到以子字符串开头的行/记录,例如"foo" 找到 "footestbar" 但不是 "testbarfoo"。
我正在考虑对文件进行一次排序,然后记录以“a”开头的行、以“b”开头的行等的位置。这样可以让我快速跳转到正确的部分并减少所需的时间.我可以通过记录所有三个字符组合开始的位置来进一步改进,以使其更快,但有些事情告诉我有更好的方法。
【问题讨论】:
-
在文件中搜索 100GB 的内容。真的吗?如果是一次就好了。如果你想要实时,我认为你应该检查基于文本的搜索引擎。例如 ElasticSearch、Apache Lucene
-
我不太喜欢在已排序文件中记录特定字母开头的想法。如果您的文件按行按字母顺序排序,则可以在 log n 中进行二进制搜索。
-
假设你有一个 100GB 的文件,每行 100 个字符,保留这些索引将导致大约
3GB(用于键和整数偏移) -
谢谢我现在正在看这个:unix.stackexchange.com/questions/247508/…
-
@UrielEli 3G 非常适合内存,但它是一个好的解决方案吗?我可以将它存储在某种简单的数据库格式中,例如 Berkeley DB
标签: python file search full-text-search hard-drive