2백만 개 이상의 파일을 효과적으로 처리

2백만 개 이상의 파일을 효과적으로 처리

저는 3개 수준의 하위 디렉터리에 약 2M개의 파일이 저장된 파일 기반 DB를 가지고 있습니다.

2/2/6253
2/2/6252
...

파일 크기는 30바이트에서 60KB까지 다양합니다. DB 전체가 읽기 전용입니다. DB의 크기는 약 125GB입니다.

추가됨:모든 파일은 zlib(python)로 압축됩니다.

파일 시스템이 포함된 하나의 파일로 모든 것을 처리하고 싶습니다. 어떤 파일 시스템을 선택하는 것이 최선입니까?

현재 다음 스크립트를 사용합니다.

dd if=/dev/zero of=/my_file.iso bs=1024K count=60000
mkfs.ext4 -f /my_file.iso
mount -o loop /my_file.iso /mnt/

답변1

아마도 XFS를 사용하고 싶을 것입니다.

그것은 당신이 요구하는 것을 할 수 있고 일을 수행합니다.

덜 사용되는 파일 시스템으로 인해 이를 복잡하게 만들 이유가 없으며, 이로 인해 다른 단점이 발생할 수 있습니다.

다음을 참조하세요:하위 디렉터리 수는 Linux에서 드라이브 읽기/쓰기 성능에 어떤 영향을 줍니까? 그리고XFS에 대한 높은 디렉터리 대 파일 비율의 영향

좀 더 난해한 것을 원한다면 맨 위에 파일 시스템이 있는 ZFS zvols가 흥미로운 대안을 제공할 수 있습니다(압축, 무결성 및 이식성을 목적으로).

여기를 보아라:ext4와 함께 사용되는 투명한 압축 파일 시스템

답변2

작은 파일의 수를 보면 SquashFS 사용을 고려해 보겠습니다. 특히 CPU가 충분히 강력하다면(Pentium III 또는 1GHz ARM이 없음을 의미).

저장된 데이터 유형에 따라 SquashFS는 크기를 크게 줄여 읽을 때 I/O를 줄일 수 있습니다. 유일한 단점은 읽기 시 CPU 사용량입니다. 반면, 최신 CPU는 HDD나 심지어 SSD보다 훨씬 빠른 속도로 압축을 풀 수 있습니다.

또 다른 장점은 공간/대역폭 및/또는 전송 후 압축을 푸는 데 소요되는 시간을 절약한다는 것입니다.

일부 벤치마크이를 ISO 및 기타 유사한 수단과 비교합니다. 모든 벤치마크와 마찬가지로, 가볍게 받아들이고 자신만의 벤치마크를 가짜로 만드는 것이 더 좋습니다. ;-)

편집: 상황에 따라(여기서는 감히 짐작할 수 없습니다) 압축 없는 SquashFS( mksquashfs -noD)는 읽기용 코드가 훨씬 더 간단하고 읽기 전용 작업에 최적화되어야 하므로 ext4보다 성능이 뛰어날 수 있습니다. 그러나 이는 사용 사례에서 벤치마킹하는 것은 실제로 사용자에게 달려 있습니다. 또 다른 장점은 SquashFS 이미지가 데이터보다 약간 크다는 것입니다. Ext4를 사용하면 항상 더 큰 루프 장치를 만들어야 합니다. 단점은 물론, 데이터를 변경해야 할 때 다소 불편하다는 점입니다. ext4를 사용하면 훨씬 더 쉽습니다.

답변3

읽기 전용인 경우 ISO 파일을 사용하지 않는 이유는 무엇입니까? genisoimage또는 를 사용할 수 있습니다 mkisofs.

전체를 압축하려면 squashfs압축률이 매우 높은 또 다른 읽기 전용 파일 시스템인 를 사용할 수도 있습니다.

답변4

이것이 귀하의 목적에 맞는지 잘 모르겠지만 tar여러 파일을 결합하는 것을 고려해 보셨습니까? 그러면 파일 시스템에 대한 부담과 공간 요구 사항이 줄어들 수 있으며 데이터베이스 애플리케이션은 tar주변의 많은 라이브러리 중 하나를 사용하여 특정 파일에 대한 데이터를 읽을 수 있습니다.

액세스 패턴에 따라 성능이 향상될 수도 있습니다.

관련 정보