2010-04-02 3 views
4

크기가 2k ~ 5k 인 1 백만 개의 사진을 저장해야하는 ASP.Net MVC 사이트를 만들고 있습니다. 이전 ressearch에서 보면 파일 서버가 db보다 더 낫다고 여깁니다.크기가 각각 2k 인 수백만 장의 사진을 저장하는 방법

이 많은 파일을 저장할 때 특별히 고려해야 할 사항이 있습니까? 한 폴더에 너무 많은 파일이있는 경우 Windows에서 사진을 빨리 찾을 수있는 문제가 있습니까? 세그먼트 화 된 디렉토리 구조를 생성해야합니까? 예를 들어 파일 이름별로 분할하는 경우? 잠재적 인 미래 확장 요구를 위해 솔루션이 최소 1,000 만 장의 사진으로 확장되는 것이 좋을 것입니다.

답변

5

4KB는 NTFS의 기본 클러스터 크기입니다. 일반적인 사진 크기에 따라이 설정을 조정할 수 있습니다. 몇 가지 문제를 How many files can I put in a directory? 및 방지 : http://support.microsoft.com/kb/314878

나는 다른 하나 FS 이동할 수 있도록 하위 디렉토리와 트리를 구축 할 것 http://www.frank4dd.com/howto/various/maxfiles-per-dir.htm

또한 관련 사진을 포함하는 아카이브는 하나를로드 할 수 있습니다 파일을 엽니 다. 병목 현상이 압축되면 I/O가 병목 현상을 일으키지 만 CPU가 압축되어 있으면 압축을 풀 수 있습니다.

DB는 유지하기가 쉽지만 느리지 만 ... 여러분에게 달려 있습니다!

1

NTFS라고 가정 할 때 볼륨 당 40 억 개의 파일 (2^32-1)의 제한이 있습니다. 그건 문제가되지 않습니다 하나의 폴더에있는 파일의

많은 수의 (운영 체제 파일 등 포함) 볼륨에있는 모든 폴더에 대한 총 한계입니다; NTFS는 빠른 검색을 위해 B + 트리를 사용합니다. 짧은 파일 이름 생성 (mypic ~ 1.htm으로 mypictureofyou.html을 검색 할 수있는 기능)을 사용하지 않는 것이 좋습니다.

여러 개의 디렉토리로 분할 할 때 성능상의 이점이 있는지 모르겠습니다. 내 생각 엔 NTFS는 큰 디렉토리에서 성능을 발휘하도록 설계되었으므로 이점이 없다는 것입니다.

여러 개의 디렉토리로 분할하려는 경우 파일 이름의 해시 함수를 사용하여 디렉토리 이름 (예 : 파일 이름의 첫 번째 문자 인 디렉토리 이름이 아닌)을 가져와 각 하위 디렉토리에 대략 같은 수의 파일.

+0

코드는 전체 파일 수가 매우 많은 디렉토리에서 파일을 읽을 수 있지만 여전히 좋은 생각은 아닙니다. Explorer에서 수천 개의 파일로 디렉토리를 열려고 시도한 적이 있다면 매우 느립니다. 서브 디렉토리에 해싱하는 것은 많은 도움이됩니다. – Kleinux

+1

탐색기의 속도가 느린 이유는 Explorer가 파일 이름 자체를 검색하는 대신 모든 파일 이름을 사용하여 수행하려고하는 작업 때문일 수 있습니다. 예를 들어 모든 파일을 읽고 축소판을 표시하는 데 시간이 오래 걸립니다. 파일 이름을 이미 알고 있다면 개별 파일을 검색하는 것이 빠릅니다. 파일 저장 및 검색을 위해 자체 시스템을 작성하는 경우 NTFS보다 성능이 좋을 수도 있고 그렇지 않을 수도 있습니다. –

1

콘텐츠 전송 네트워크 사용을 배제하지 않을 것입니다. 이 문제를 해결하기 위해 설계되었습니다. Amazon S3를 통해 많은 성공을 거두었습니다. Microsoft 기반 솔루션을 사용하고 있기 때문에 아마도 Azure가 적합 할 것입니다.

타사 솔루션을 사용할 수없는 요구 사항이 있습니까?

2

파일 시스템이 너무 많은 파일을 디렉토리에 저장할 수는 없지만 Windows 탐색기를 사용하여 해당 디렉토리에 액세스하려는 경우 영원히 걸릴 것이므로 수동으로 액세스해야하는 경우 폴더를 구분해야합니다. 예를 들어 이름의 각 2-3 글자/숫자 또는 더 깊은 구조 당 디렉토리를 사용하십시오.

1k 폴더의 파일을 1k 개의 파일로 나눌 수 있다면 각 파일은 충분하고 코드는 매우 간단합니다.

관련 문제