Liczba plików w katalogu

19

Mam katalog z około 100 000 małych plików (każdy plik jest z 1-3 linii, każdy plik jest plikiem tekstowym). Rozmiar katalogu nie jest bardzo duży (<2 GB). Te dane znajdują się na profesjonalnie administrowanym serwerze NFS. Serwer działa pod Linuksem. Myślę, że systemem plików jest ext3, ale nie jestem tego pewien. Ponadto nie mam dostępu root do serwera.

Te pliki są wynikiem eksperymentu naukowego na dużą skalę, nad którym nie mam kontroli. Muszę jednak przeanalizować wyniki.

Każda operacja / przetwarzanie we / wy w tym katalogu jest bardzo, bardzo wolne. Otwieranie pliku (otwieranie w pythonie), czytanie z otwartego pliku, zamykanie pliku są bardzo wolne. W bash ls, du itp. Nie działają.

Pytanie brzmi:

Jaka jest maksymalna liczba plików w katalogu w systemie Linux w taki sposób, że przetwarzanie, otwieranie, czytanie itp. Jest praktyczne? Rozumiem, że odpowiedź zależy od wielu rzeczy: typu fs, wersji jądra, wersji serwera, sprzętu itp. Chcę tylko, jeśli to możliwe, ogólnej zasady.

carlosdc
źródło
6
Odpowiedź na twoje bezpośrednie pytanie została dobrze udzielona przez Gilesa, ale w sumie systemy plików Linuksa słabo zastępują bazy danych, gdy używasz nazw plików jako kluczy do małych kawałków danych. Nie kontrolujesz generowania, ale możesz przetworzyć dane do postaci bardziej podatnej na analizę; jeśli tego nie zrobisz, będziesz płacić narzut systemu plików na każdym kroku. Możesz zmniejszyć koszty ogólne, ale możesz być najszczęśliwszy, jeśli go wyeliminujesz.
msw

Odpowiedzi:

22

Jak można się domyślić, zależy to od wielu rzeczy, głównie od typu systemu plików i opcji oraz do pewnego stopnia wersji jądra. W serii ext2 / ext3 / ext4 nastąpiła znaczna poprawa, kiedy dir_indexpojawiła się opcja (jakiś czas po początkowej wersji ext3): sprawia, że ​​katalogi są przechowywane jako drzewa wyszukiwania (logarytmiczny dostęp do czasu) zamiast list liniowych (liniowy dostęp do czasu ). Nie jest to coś, co można zobaczyć w NFS, ale jeśli masz jakiś kontakt z administratorami, możesz poprosić ich o uruchomienie tune2fs -l /dev/something |grep features(być może nawet przekonać ich do aktualizacji?). Liczy się tylko liczba plików, a nie ich rozmiar.

Nawet przy dir_index100000 wydaje się duży. Najlepiej uzyskaj autorów programu, który tworzy pliki, aby dodać poziom podkatalogów. Aby nie zmniejszać wydajności, zalecałbym limit około 1000 plików na katalog dla ext2 lub ext3 bez dir_indexi 20000 z dir_indexlub reiserfs. Jeśli nie możesz kontrolować sposobu tworzenia plików, przenieś je do osobnych katalogów, zanim zrobisz cokolwiek innego.

Gilles „SO- przestań być zły”
źródło