파일 수가 많은 디렉터리에 새 파일을 추가하는 데 시간이 더 오래 걸리는 이유는 무엇입니까?

파일 수가 많은 디렉터리에 새 파일을 추가하는 데 시간이 더 오래 걸리는 이유는 무엇입니까?

2011년에 우리는 독특한 문제에 직면했습니다.

우리는 고객의 처리 도구 중 하나가 시간당 약 20,000개의 항목을 처리하는 데 오랜 시간이 걸리는 것을 확인했습니다. 3일 동안 매달 3백만 개가 넘는 파일을 처리해야 하기 때문에 이는 우리에게 문제가 됩니다.

또한 이는 약 10%에 해당하는 CPU 사용률 문제가 아니라는 사실도 확인했습니다. 이 도구는 지역 단축 코드(예: 델리의 경우 DEL) 이름을 딴 폴더에 파일을 쓰는 데 사용됩니다. 처리 작업이 완료되면 폴더에는 최종적으로 5,000~200,000개의 파일이 포함될 수 있습니다.

또한 파일이 폴더에 기록될 때 이전에 해당 폴더에 기록된 파일(~10000보다 큰 경우)을 하위 폴더로 삭제하면 작업 속도가 크게 빨라지는 것을 관찰했습니다.

결국, 도구 공급업체가 지역 번호 이름(DEL/110012 등)이 있는 폴더의 우편 번호 이름이 지정된 폴더에 파일을 쓰도록 도구를 수정했을 때 문제가 해결되었습니다. 이제 각 폴더에는 최대 약 2000개의 파일이 포함됩니다.

편집 1: 사용된 운영 체제는 HP-UX입니다. 편집 2: 파일 크기는 평균 25-50KB 범위입니다.

그렇다면 파일 수가 많은 디렉터리에 새 파일을 추가하는 데 시간이 더 오래 걸리는 이유는 무엇입니까?

답변1

파일이 많은 경우 새 파일을 추가할 때 더 많은 파일을 검색/셔플해야 합니다. 이 문제를 해결하는 한 가지 방법은 디렉토리를 분할하는 것입니다. 즉, 이름의 첫 번째 문자에 대한 하위 디렉토리를 생성하는 것입니다(또는 유사하게 git(1)은 객체 해시의 처음 두 자리 16진수를 파일 이름으로 사용합니다. Fedora 패키지 리포지토리는 첫 번째 문자를 사용합니다 문자 소문자).

관련 정보