Piszę aplikację, która również przechowuje wiele plików, chociaż moje są większe i mam 10 milionów z nich, które podzielę na wiele katalogów.
ext3 działa powoli, głównie z powodu domyślnej implementacji „listy połączonej”. Więc jeśli masz wiele plików w jednym katalogu, oznacza to, że otwieranie lub tworzenie innego będzie coraz wolniejsze. Istnieje coś takiego jak indeks htree, który jest dostępny dla ext3, który podobno znacznie poprawia sytuację. Ale jest dostępny tylko przy tworzeniu systemu plików. Zobacz tutaj: http://lonesysadmin.net/2007/08/17/use-dir_index-for-your-new-ext3-filesystems/
Ponieważ i tak będziesz musiał odbudować system plików, a ze względu na ograniczenia ext3, zalecam, abyś używał ext4 (lub XFS). Myślę, że ext4 jest trochę szybszy z mniejszymi plikami i ma szybsze przebudowy. O ile mi wiadomo, indeks Htree jest domyślny na ext4. Tak naprawdę nie mam żadnego doświadczenia z JFS ani Reiserem, ale słyszałem, że ludzie wcześniej to polecają.
W rzeczywistości prawdopodobnie przetestowałbym kilka systemów plików. Dlaczego nie wypróbować ext4, xfs i jfs i przekonać się, który z nich zapewnia najlepszą ogólną wydajność?
Coś, co powiedział mi deweloper, który może przyspieszyć działanie w kodzie aplikacji, nie polega na wywołaniu „stat + open”, ale raczej na „open + fstat”. Pierwszy jest znacznie wolniejszy niż drugi. Nie jestem pewien, czy masz na to jakąkolwiek kontrolę lub wpływ.
Zobacz mój post tutaj na stackoverflow.
Przechowywanie i uzyskiwanie dostępu do 10 milionów plików w systemie Linux
zawiera bardzo przydatne odpowiedzi i łącza.