크기는 크지 않지만 평균 크기가 30kb 인 약 60,000 개의 파일이 단일 디렉토리에 저장되는 것을 사용해야합니다 (이것은 요구 사항이므로 더 적은 수의 파일로 하위 디렉토리로 나눌 수는 없습니다).
파일은 무작위로 액세스되지만 일단 생성되면 동일한 파일 시스템에 대한 쓰기는 없습니다. 현재 Ext3을 사용하고 있지만 매우 느립니다. 어떤 제안?
크기는 크지 않지만 평균 크기가 30kb 인 약 60,000 개의 파일이 단일 디렉토리에 저장되는 것을 사용해야합니다 (이것은 요구 사항이므로 더 적은 수의 파일로 하위 디렉토리로 나눌 수는 없습니다).
파일은 무작위로 액세스되지만 일단 생성되면 동일한 파일 시스템에 대한 쓰기는 없습니다. 현재 Ext3을 사용하고 있지만 매우 느립니다. 어떤 제안?
답변:
이 기사의 저자는 파일 수가 많은 파일 시스템의 일부 성능 문제를 다루고 다양한 파일 시스템 ext3, ext4 및 XFS의 성능을 잘 비교합니다. 슬라이드 쇼로 제공됩니다. http://events.linuxfoundation.org/slides/2010/linuxcon2010_wheeler.pdf
ext3의 디렉토리에있는 많은 파일은 자매 사이트 stackoverflow.com 에서 자세히 논의되었습니다.
내 생각에 ext3의 한 디렉토리에있는 60 000 개의 파일은 이상적이지 않지만 다른 요구 사항에 따라 충분할 수 있습니다.
승인. ReiserFS, XFS, JFS, Ext3 (dir_hash enabled) 및 Ext4dev (2.6.26 커널)를 사용하여 예비 테스트를 수행했습니다. 첫 인상은 모든 것이 충분히 빠르다는 것입니다. (비밀 한 워크 스테이션에서) 원격 프로덕션 시스템의 프로세서 속도가 상당히 느립니다.
초기 테스트에서도 ReiserFS에 이상한 점이 있었으므로 배제했습니다. JFS는 다른 모든 것보다 CPU 요구량이 33 % 적어서 원격 서버에서 테스트 할 것 같습니다. 성능이 충분하면 사용하겠습니다.
내 파일이 더 크지 만 많은 파일을 저장하는 응용 프로그램을 작성 중이며 여러 디렉토리에 걸쳐 분할 할 1000 만 개가 있습니다.
ext3은 주로 기본 "링크 된 목록"구현으로 인해 느립니다. 따라서 한 디렉토리에 많은 파일이 있으면 다른 디렉토리를 열거 나 만들 때 속도가 느려집니다. ext3에 사용할 수있는 htree 인덱스라는 것이 많이 있습니다. 그러나 파일 시스템 생성에서만 사용할 수 있습니다. 여기를 참조하십시오 : http://lonesysadmin.net/2007/08/17/use-dir_index-for-your-new-ext3-filesystems/
어쨌든 파일 시스템을 다시 빌드해야하고 ext3 제한으로 인해 ext4 (또는 XFS)를 사용하는 것이 좋습니다. 작은 파일 일수록 ext4가 조금 더 빠르며 재 구축이 더 빠르다고 생각합니다. 내가 아는 한 Htree 색인은 ext4에서 기본값입니다. JFS 또는 Reiser에 대한 경험이 없지만 사람들이 이전에 권장한다고 들었습니다.
실제로 여러 파일 시스템을 테스트했을 것입니다. ext4, xfs 및 jfs를 사용 해보고 어떤 것이 가장 우수한 성능을 발휘하는지 확인하십시오.
개발자가 응용 프로그램 코드에서 속도를 높일 수 있다고 말한 것은 "stat + open"호출이 아니라 "open + fstat"입니다. 첫 번째는 두 번째보다 상당히 느립니다. 그에 대한 통제력이나 영향력이 있는지 확실하지 않습니다.
stackoverflow에 대한 내 게시물을 참조하십시오. 리눅스에서 최대 천만 개의 파일을 저장하고 액세스하는 것은 매우 유용한 답변과 링크가 있습니다.
dir2index를 활성화하기 위해 tune2fs를 사용하면 도움이 될 수 있습니다. 활성화되어 있는지 확인하려면 :
sudo tune2fs -l /dev/sda1 | grep dir_index
활성화되어 있지 않은 경우 :
sudo umount /dev/sda1
sudo tune2fs -O dir_index /dev/sad1
sudo e2fsck -D /dev/sda1
sudo mount /dev/sda1
그러나 나는 당신이 잘못된 길을 가고있을 것이라고 생각합니다 ... 평평한 색인을 생성하고 그에 따라 무작위로 선택하는 코드를 사용하는 이유는 무엇입니까? 그런 다음보다 최적화 된 트리 구조를 위해 하위 디렉토리를 사용할 수 있습니다.
/dev/sad1
복사 / 파스타 오류를 방지하기 위해 의도적?
ext3 이하는 디렉토리 당 최대 32768 개의 파일을 지원합니다. ext4는 실제 파일 수에서 최대 65536 개를 지원하지만 더 많은 파일을 보유 할 수 있습니다 (파일을 디렉토리에 저장하지 않으므로 대부분의 사용자 목적에 중요하지 않음).
또한 디렉토리가 ext * 파일 시스템에 저장되는 방식은 본질적으로 하나의 큰 목록입니다. 보다 현대적인 파일 시스템 (Reiser, XFS, JFS)에서는 B- 트리로 저장되어 큰 세트에 훨씬 효율적입니다.
파일 시스템은 이러한 요구 사항에 이상적인 스토리지가 아닐 수도 있습니다. 어떤 종류의 데이터베이스 스토리지가 더 좋습니다. 그래도 도움이되지 않으면 여러 디렉토리에서 파일을 분할하고 unionfs를 사용하여 모든 파일을 표시하려는 단일 디렉토리에 해당 디렉토리를 마운트 (바인딩)하십시오. 나는이 기술을 전혀 사용하지 않았지만 시도해 볼 가치가 있습니다.