당신이 뭔가에 해당하는 것으로 가정 할 수있다 임의의 데이터의 1 기가 바이트 문자열있다 :가장 빠른 방법은 파이썬
1_gb_string=os.urandom(1*gigabyte)
우리는 할 것이다 고정 폭의 무한 수인 1 킬로바이트 패턴 1_kb_pattern
에 대해이 문자열 1_gb_string
을 검색합니다. 우리가 패턴을 찾을 때마다 다를 것입니다. 따라서 캐싱 기회는 분명하지 않습니다. 동일한 1 기가 바이트 문자열이 반복해서 검색됩니다. 다음은 어떤 일이 일어 났는지 설명하는 간단한 생성기입니다.
def findit(1_gb_string):
1_kb_pattern=get_next_pattern()
yield 1_gb_string.find(1_kb_pattern)
패턴의 첫 번째 항목 만 찾아야합니다. 그 후에는 다른 주요 처리를 수행하지 않아야합니다.
1GB 이상의 데이터 문자열과 비교하여 1KB 패턴을 찾는 데 Python의 bultin 찾기보다 빠르다면 무엇을 사용할 수 있습니까?
(I 문자열을 분할 병렬를 검색하는 방법을 이미 알고, 그래서 당신은 그 기본 최적화를 무시할 수 있습니다.)
업데이트 : 16GB의 메모리 요구 사항을 행하십시오.
1_gb_string이 변경 될 가능성이 있습니까? –
소리가 나지 않지만 고정 너비의 청크만을 검색하고 있습니까? 바이트와 메가 바이트가 킬로 바이트와 기가 바이트 대신 메가 바이트 인 경우 다음 두 바이트가 포함 된 문자열이됩니다. "49FA 32D1"은 "FA32"의 1 바이트 패턴과 일치합니까? –
> 1_gb_string이 변경 될 가능성이 있습니까? 아니요, 모든 실행에서 동일하게 유지됩니다. > 너비가 고정 된 청크만을 검색하고 있습니까? 아니요. – user213060