2012-09-24 3 views
2

작은 이미지 호스팅이 있고 많은 중복 콘텐츠가 있다는 것을 깨달았습니다. 체크섬이나 해시 코드를 사용하여 미래에이 문제를 없애기 위해, 새로 업로드 된 파일을 해쉬하고 기존 이미지 해시 데이터베이스와 비교하여 이미 존재하는 경우 삭제하고 사용자에게 기존 이미지 링크가 제공됩니다. 하나의 인스턴스에 모두

내 설정은 barebones Node.js + jQuery File Upload + 2 개의 디렉토리 (포럼 업로드의 경우 하나, 직접 웹 업로드의 경우 하나)입니다.

Node.js 서버에서 중복되는 콘텐츠 피하기

각 디렉토리에 수천 또는 수 백만 개의 파일이있을 가능성을 고려할 때 가장 적합한 (빠른 & 신뢰할 수있는) 해시 및 데이터베이스 설정은 무엇입니까? 나는 MD5 나 SHA1이 과잉이라고 생각하고 많은 자원을 필요로 할 수도있다. 더 간단한 해결책이 있는지 알고 싶습니다.

통계 : 서버에서
~ 1,000 이미지 업로드 일상
~ 400킬로바이트 평균 이미지 크기
~ 35,000 이미지
~ 30 % 중복 된 내용이

답변

0

MD5를 (MD5를 사용하여 테스트) 실제로 꽤 빠르며, 유즈 케이스만큼 빠르다. 한 가지 일화 벤치 마크에서는 단일 CPU (source)에서 초당 ~ 400 메가 바이트 정도의 성능을 보입니다. 서버 처리에서 병목 현상이되지는 않으며 중복 파일을 확인하는 신뢰할 수있는 방법입니다. MD5는 충돌 공격에 취약하지만 힘들게 준비해야합니다. 우연한 충돌은 통계적으로 불가능합니다. 충돌은 응용 프로그램에서 너무 큰 문제는 아니지만 (어쨌든 처리해야합니다.)

진정한 신뢰성을 제외하고 속도를 원한다면 CRC를 사용할 수 있습니다. 바이트 스트림의 오류를 탐지하기위한 진정한 해시가 아닙니다. 백만 분의 1에 가까운 비교적 높은 충돌 속도를 가지고 있습니다. 그러나, 그것은 빠르게 타오른다. 라우터의 하드웨어로 구현 될 예정입니다.

+1

내 사용 사례를 감안할 때 나는 충돌 공격에 대해 걱정해야한다고 생각하지 않습니까? –

0

방법은 다음과 같은 접근 방식에 대해 :

  • 사용자가 이미지를 업로드, 그것을 사용하여 이미지가 다음 저장
  • 는 MD5 합계를 만듭니다 파일 이름
  • 원본 이미지의 이름으로 MD5 합계 는 FS에도 저장되지만 MD5 이름을 가리키는 심볼릭 링크로 사용됩니다.
  • 사용자가 복제 된 이미지를 업로드하면 MD5 이름이 이미 있는지 여부를 확인하고 심볼릭 링크를 만들 수 있습니다. 그 구조로 기존의 이미지를 변환하는

, 나는 아주 간단한 쉘 스크립트는 트릭을 할 것 md5sum, mvln -s을 사용하여 확신합니다.

또 다른 가능성은 MongoDB와 같은 것을 사용하여 DB에 이미지를 저장하는 것입니다. 클러스터링이 더 쉽습니다.

관련 문제