저는 중복 제거를 구현하는 opensource 프로젝트를 진행하고 있습니다. 프로젝트에 대한 링크는 아래 두 개의 하이퍼 링크를 참조하십시오. 프로젝트의 성능은 현재 매우 양호하지만 더 많은 블록이 디스크에 기록되면 성능이 저하됩니다. 이것은 HashManager 때문입니다. 작성된 각 블록에 대해 hashmanager는 해시 - 블록 아이디 쌍을 저장합니다. 중복 제거 프로세스의 경우 지정된 해시가있는 블록 식별자 목록이 필요합니다. (사용 된 해시는 Crc32 임) HashManager의 인터페이스에 대해서는 the source을 참조하십시오.많은 데이터 블록에 대해 해시를 저장하고 해시로 목록을 검색하는 방법은 무엇입니까?
인터페이스의 현재 implementation은 목록을 256 개의 파일 (crc & 0xFF)에 저장하고 전체 목록을 메모리에로드합니다. 다른 목록이 필요할 때 이전 목록이 저장되고 다음 목록이로드됩니다. 이것이 메모리 소모를 야기 할 수 있다는 사실 외에도 이것은 성능 저하를 의미합니다.
문제를 극복하기 위해 어떤 좋은 옵션이 있습니까?
(그냥 clearify합니다 : 블록들이 중복 제거하기 전에 일치하는지 완전히 점검) 내가 온 디스크 구조에서 전문가가 아니다
나는 내 검색에서 B-tree를 발견했지만, 복잡한 알고리즘을 좋아하는 것 같습니다. 좋은 구현에 대해 잘 알고 있습니까? – mterwoord