2010-08-22 4 views
3

22 개의 폴더에 660000 개의 xml 파일 (고유 한 파일 이름 포함)이 있습니다. 각 폴더에는 30000 개의 파일이 있습니다. C# 응용 프로그램에서 이름으로 효율적으로 찾을 필요가 있습니다. Windows (? Vista +?)에 SearchIndexer 서비스가 있다는 것을 알고 있으며, 필자가이 파일을 사용할 수 있는지 또는 파일을 직접 색인화해야하는지 궁금한가요?파일 인덱싱 및 폴더에서 파일을 찾는 가장 빠른 방법은 무엇입니까?

또는 다른 파일의 기본 키와 경로 인 파일 이름으로 데이터베이스를 만들 수 있다고 생각합니다. 그러나, 내가 660000 행이 하나의 테이블을 만들거나 각각 30000 행 22 테이블을 만들어야합니까? 그리고 왜?

미리 감사드립니다.

답변

2

내 경험으로는 NTFS 일 수 있지만 30,000 개 파일 디렉토리에서 파일을 얼마나 빨리 열 수 있는지 확인해야합니다. 더 많은 디렉토리에 파일을 배포하는 것이 더 낫다는 것을 알게 될 것입니다.

00/ 
    00/ 
    <99 files that hash here> 
.. 
65 

당신은 여전히를 작성해야 : 당신이 디렉토리 레이아웃을 제어 할 수있는 경우

, 그런 다음 인덱스로 파일 시스템을 사용할 수 있습니다 0 660000. 사이의 숫자로 파일 이름을 해시 고려 각 파일을 읽고 해시를 계산하여 올바른 위치에 저장하는 간단한 "인덱서". 이 방법은 당신이 디렉토리에있는 파일의 수에 대한 다양한 "밀도"를 프로파일 링 할 수 있다는 것입니다에 대한 좋은 데요

Lookup(string filename) 
{ 
    int hash = filename.GetHashCode() % 660000; 
    string directory = HashToDirectory(hash); 
    string path = Path.Combine(directory, filename); 
    ... 

한 가지 : 당신은 다음과 같은 파일을 조회. HashToPath 기능 만 변경하면됩니다. 또한 데이터베이스가 필요하지 않습니다.

개의 파일이 저장된 웹 크롤러에서 유사한 접근 방식을 사용했습니다. 그것은 NTFS에 대한 것이므로 YMMV입니다.

관련 문제