【发布时间】:2010-12-17 13:05:57
【问题描述】:
有一个 1 GB 的任意数据字符串,您可以假设它相当于:
1_gb_string=os.urandom(1*gigabyte)
我们将在这个字符串1_gb_string 中搜索无限数量的固定宽度、1 KB 模式1_kb_pattern。每次我们搜索的模式都会不同。所以缓存机会并不明显。将一遍又一遍地搜索相同的 1 GB 字符串。这是一个简单的生成器来描述正在发生的事情:
def findit(1_gb_string):
1_kb_pattern=get_next_pattern()
yield 1_gb_string.find(1_kb_pattern)
请注意,只需要找到第一次出现的模式。之后,不应进行其他主要处理。
在将 1KB 模式与 1GB 或更大的数据字符串匹配时,我可以使用什么比 python 的 bultin find 更快?
(我已经知道如何拆分字符串并并行搜索,因此您可以忽略基本优化。)
更新:请将内存要求限制为 16GB。
【问题讨论】:
-
1_gb_string 可能会改变吗?
-
听起来不像,但你只是沿着固定宽度的块搜索吗?如,如果它是字节和兆字节而不是千字节和千兆字节,包含以下两个字节的字符串是否会匹配:“49FA 32D1”与“FA32”的 1 字节模式匹配?
-
> 1_gb_string 可能会改变吗?不,在所有运行过程中保持不变。 > 你只搜索固定宽度的块吗?不幸的是没有。
标签: python algorithm search large-data-volumes