次のようなものと同等であると想定できる任意のデータの 1 ギガバイトの文字列があります。
1_gb_string=os.urandom(1*gigabyte)
この文字列 を検索して1_gb_string
、固定幅の 1 キロバイト パターンを無限に検索します1_kb_pattern
。検索するたびにパターンが異なります。したがって、キャッシングの機会は明らかではありません。同じ 1 ギガバイトの文字列が何度も検索されます。何が起こっているかを説明する簡単なジェネレーターを次に示します。
def findit(1_gb_string):
1_kb_pattern=get_next_pattern()
yield 1_gb_string.find(1_kb_pattern)
パターンの最初のオカレンスのみを見つける必要があることに注意してください。その後、他の主要な処理は実行されません。
1GB 以上のデータ文字列に対して 1KB のパターンを照合するために、python の bultin find よりも高速に使用できるものは何ですか?
(文字列を分割して並行して検索する方法については既に認識しているため、その基本的な最適化は無視してかまいません。)
更新: メモリ要件を 16 GB に制限してください。