저장이 월 500TB 입니다. 같은 내용이 여러 벌 저장되면 그만큼 곱해집니다. 주소 정규화로 잡히지 않는 중복이 이 절의 주제입니다.
주소를 정규화해도 남는 중복
앞 단계에서 주소를 정규화했습니다. 그것으로 잡히는 것은 같은 사이트 안의 같은 페이지뿐입니다.
| 중복의 종류 | 주소 정규화로 잡히나 |
|---|---|
| 추적 매개변수만 다른 주소 | 잡힌다 |
| 인쇄용 페이지 | 어렵다. 경로가 다르다 |
| 다른 도메인의 사본 | 못 잡는다 |
| 같은 글이 목록과 상세에 함께 | 못 잡는다 |
그래서 주소가 아니라 내용으로 판단합니다. 내용의 지문을 만들어 이미 있는 지문이면 저장하지 않습니다. 지문을 만드는 방법 자체는 파일 업로드 설계의 중복 제거에서 다뤘고, 여기서는 그것을 저장 여부 판단에 쓰는 것이 다릅니다.
저장은 건너뛰고 발견은 계속한다
중복이라고 그 페이지를 버리면 안 됩니다. 그 페이지의 링크는 여전히 쓸모가 있습니다.
내용이 중복이면 저장을 건너뛴다
링크는 그대로 뽑아 목록에 넣는다
사본 사이트가 원본에 없는 링크를 갖고 있는 경우가 있습니다. 그리고 링크 추출은 이미 내려받은 내용으로 하는 일이라 추가 비용이 없습니다.
거의 같은 페이지
완전히 같지 않아도 중복인 경우가 많습니다. 광고나 날짜만 다른 페이지가 그렇습니다. 지문이 조금만 달라도 값이 완전히 달라지므로 완전 일치로는 못 잡습니다.
거의 같은 것을 잡으려면 비슷한 내용에 비슷한 값이 나오는 방식을 씁니다. 그러면 값의 거리로 유사도를 판단할 수 있습니다.
| 방법 | 잡는 것 | 대가 |
|---|---|---|
| 완전 일치 지문 | 바이트가 같은 것 | 값싸다 |
| 유사도 지문 | 거의 같은 것 | 계산과 비교가 더 든다 |
둘을 함께 씁니다. 완전 일치로 대부분을 값싸게 걸러내고, 남은 것에만 유사도 판단을 적용합니다.
중복이 목록을 오염시킨다
중복 페이지는 저장만 늘리는 것이 아닙니다. 그 페이지에서 나온 주소들이 목록을 채우고, 그 주소들도 대개 중복 페이지로 이어집니다.
그래서 중복 판정이 늦으면 목록이 먼저 오염됩니다. 내려받은 직후에 판단해 그 다음 발견을 조절하는 편이 낫습니다. 사본 사이트로 확인되면 그 호스트의 우선순위를 낮춥니다.
원본을 어떻게 고르나
중복 중에서 어느 것을 남길지 정해야 합니다. 검색 결과에 보여줄 주소가 그것이기 때문입니다.
먼저 발견한 것을 남긴다
또는 링크가 더 많이 걸린 쪽을 남긴다
또는 사이트가 스스로 알려 준 정본 주소를 따른다
사이트가 알려 주는 정본 주소가 가장 정확합니다. 그 표시가 있으면 우리가 추측하지 않아도 되고, 없을 때만 우리 기준을 씁니다.