문제

저는 프로젝트를위한 캐싱을 구현하는 중입니다. 캐시 디렉토리 구조를 살펴본 후 다음과 같은 많은 예제를 보았습니다.

cache
cache/a
cache/a/a/
cache/a/...
cache/a/z
cache/...
cache/z
...

당신은 아이디어를 얻습니다. 파일 저장을위한 또 다른 예는 파일이 이름을 지정했다고 가정 해 봅시다. IMG_PARTY.JPG, 일반적인 방법은 다음과 같은 디렉토리에 넣는 것입니다.

files/i/m/IMG_PARTY.JPG

어떤 생각이 떠오르지 만, 나는 이것에 대한 실제 이유를 알고 싶습니다.

  • 선형 조회를 수행하는 파일 시스템은 디렉토리에 파일이 적을 때 파일을 더 빨리 찾습니다. 이러한 구조는 파일을 얇게 퍼뜨립니다.

  • *nix 유틸리티와 같은 것을 엉망으로 만들지 마십시오 rm, 한 번에 한 번에 많은 수의 인수를 삭제하는 것은 해킹되는 경향이있는 경향이 있습니다 (그러나 그것을 전달해야합니다. find 등.)

진짜 이유는 무엇입니까? "좋은"캐시 디렉토리 구조 란 무엇이며 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

내가 할 때마다 파일 시스템에서 느린 선형 검색을 피하는 것이 었습니다. 운 좋게도 적어도 Linux에서 이것은 과거의 일이되었습니다.

그러나 오늘날에도 B-Tree 기반 디렉토리를 사용하면 매우 큰 디렉토리가 다루기가 어려울 것입니다. 모든 파일의 목록을 얻는 데 영원히 시간이 걸리고 올바른 파일을 찾는 데 마음에 들지 않기 때문입니다.

다른 팁

날짜 만 사용하십시오. 날짜별로 제거되므로. :)

당신이한다면 ls -l, 모든 파일이 있어야합니다 stat()상장 시간에 상당히 추가되는 세부 사항을 얻기 위해 ED- 이는 FS가 해시 또는 선형 구조를 사용하는지 여부에 관계없이 발생합니다.

따라서 FS가 엄청나게 큰 디렉토리 크기에 대처할 수있는 능력이 있더라도 큰 평평한 구조물을 갖지 않는 좋은 이유가 있습니다 (또한 백업 할 돼지).

디렉토리에 32,000 파일로 GFS2 (클러스터)를 벤치마킹하거나 트리 구조로 정렬했습니다. 재귀 목록은 모두 평평한 구조에있을 때 목록을 얻는 것보다 약 300 배 더 빠르 셨습니다 (최대 10 분이 걸릴 수 있습니다. 디렉토리 목록)

Ext4는 비슷한 비율을 보였지만 종말점은 대부분의 사람들이 눈치 채지 못하는 몇 초 밖에 걸리지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top