우리는 서비스로서 임의의 컬렉션을 압축하고 제공 할 수 있도록 Linux 파일 시스템에 수백만 개의 텍스트 파일을 저장하려고합니다. 키 / 값 데이터베이스와 같은 다른 솔루션을 시도했지만 동시성 및 병렬 처리 요구 사항에 따라 기본 파일 시스템을 사용하는 것이 가장 좋습니다.
가장 간단한 방법은 모든 파일을 폴더에 저장하는 것입니다.
$ ls text_files/
1.txt
2.txt
3.txt
이는 EXT4 파일 시스템 에서 가능해야하며 폴더의 파일 수에는 제한이 없습니다.
두 가지 FS 프로세스는 다음과 같습니다.
- 웹 스크랩에서 텍스트 파일을 작성합니다 (폴더의 파일 수에 영향을받지 않아야 함).
- 파일 이름 목록에 따라 선택된 파일을 압축합니다.
내 질문은 폴더에 최대 천만 개의 파일을 저장하면 위의 작업 또는 일반 시스템 성능에 영향을 미치므로 파일을 저장할 하위 폴더 트리를 만드는 것과 다른가?
ls -l
있거나 stat
디렉토리의 모든 inode (예 : 글 bash
로빙 / 탭 완성)가 인위적으로 더 빠릅니다. 일부 마모 후보다 (일부 파일을 삭제하고, 새 파일을 작성하십시오). ext4는 XFS보다 이것을 사용하여 더 잘 할 수 있습니다 .XFS는 동적으로 inode에 대한 공간을 데이터에 할당하기 때문에 더 흩어져있는 inode로 끝날 수 있다고 생각합니다. (그러나 그것은 매우 작은 지식에 기초한 순수한 추측입니다; 나는 ext4를 거의 사용하지 않았습니다). abc/def/
하위 디렉토리로 이동 하십시오.
ZipOutputStream
생성하는 Java 서블릿조차도 무료 Linux 기본 파일 시스템을 능가 할 것이라고 생각한다. JDBC 결과 세트를 처리하고 zip 스트림을 작성하는 루프는 아마도 6-8 줄의 Java 코드 일 것입니다.
dir_index
기본적으로 자주 사용되는을 사용하면 조회 속도가 빨라지지만 디렉토리 당 파일 수는 제한 될 수 있습니다.