Ile plików w katalogu jest za dużo? (Pobieranie danych z sieci)

19

Pozdrowienia,

Piszę kilka skryptów do przetwarzania obrazów z różnych stron ze zdjęciami. Obecnie przechowuję wszystkie te dane w pojedynczych plikach tekstowych w tym samym katalogu.

Katalog jest dostępny w Internecie. Użytkownik końcowy wywołuje usługę internetową, która zwraca ścieżkę do pliku, którego będzie potrzebował użytkownik.

Zastanawiałem się, na jakim etapie dostrzegę wpływ na wydajność, mając wszystkie te pliki w tym samym katalogu? (Jeśli w ogóle)

Steve
źródło
Niektóre liczby dla MacOS tutaj
smci
powiązane: superuser.com/q/453348/453247
Stephen R

Odpowiedzi:

12

Wydajność różni się w zależności od używanego systemu plików.

  • FAT: zapomnij :) (ok, myślę, że limit to 512 plików na katalog)
  • NTFS: Mimo że może pomieścić 4 miliardy plików w folderze, rozkłada się stosunkowo szybko - około tysiąca zaczniesz zauważać problemy z wydajnością, kilka tysięcy i zobaczysz, że eksplorator zawiesza się przez dłuższy czas.
  • EXT3: fizyczny limit wynosi 32 000 plików, ale perf cierpi również po kilku tysiącach plików.

  • EXT4: teoretycznie nieograniczony

  • ReiserFS, XFS, JFS, BTRFS: są dobre dla wielu plików w katalogu, ponieważ są bardziej nowoczesne i zaprojektowane do obsługi wielu plików (inne zostały zaprojektowane w czasach, gdy dyski twarde były mierzone w MB, a nie GB) . Wydajność jest znacznie lepsza dla wielu plików (wraz z ext4), ponieważ oba używają algorytmu typu wyszukiwania binarnego do uzyskania pożądanego pliku (inne używają bardziej liniowego).

gbjbaanb
źródło
6
To jest źle. W EXT3 nie ma limitu 32 000 plików. Istnieje limit 32000 podkatalogów. Mam tutaj katalog z ponad 300 000 plików i działa dobrze.
davidsheldon
1
całkiem prawda - limit plików to limit całego systemu plików na i-węzły, ale jesteś ograniczony do 32k linków (tj. podkatalogów).
gbjbaanb
Oświadczenie dotyczące obecnego systemu plików NTFS również nie jest prawdziwe, może pomieścić do 4 294 967 295
Fleshgrinder
NIE mylę podkatalogów z plikami, na komputerze CentOS miałem 32000 podkatalogów, osiągnąłem limit, przeniosłem wszystkie PLIKI do tego jednego katalogu i nadal działa dobrze.
adrianTNT
Niektóre liczby dla MacOS tutaj
smci
8

Przechowuję obrazy do udostępniania przez serwer sieciowy i mam ponad 300 000 obrazów w jednym katalogu na EXT3. Nie widzę problemów z wydajnością. Przed skonfigurowaniem przeprowadziłem testy z 500 000 obrazów w katalogu i losowo uzyskując dostęp do plików według nazwy, i nie było znaczącego spowolnienia z 500 000 ponad 10 000 obrazów w katalogu.

Jedynym minusem, jaki widzę, jest to, że aby zsynchronizować nowe z drugim serwerem, muszę uruchomić rsynccały katalog i nie mogę tego po prostu zsynchronizować z podkatalogiem zawierającym najnowszy tysiąc.

davidsheldon
źródło
Cóż, aby synic z drugim serwerem myślę, że musisz stworzyć strukturę i algorytm, który zachowuje zmiany, wtedy ten dziennik może zaoszczędzić dużo czasu.
Bahadir Tasdemir
+1 To faktycznie odpowiada na pytanie.
kubańczyk
Jedną wadą jest to, że jeśli używasz klienta FTP takiego jak FileZilla i chcesz wyświetlić zawartość folderu, zajmuje to trochę czasu.
Kai Noack,
3

Liczba plików w folderze teoretycznie może być nieograniczona. Jednak za każdym razem, gdy system operacyjny uzyska dostęp do określonego folderu w celu wyszukiwania plików, będzie musiał przetworzyć wszystkie pliki w tym folderze. Przy mniej niż 500 plikach możesz nie zauważyć żadnych opóźnień. Ale gdy masz dziesiątki tysięcy plików w jednym folderze, proste polecenie listy folderów (ls lub dir) może zająć zbyt wiele czasu. Gdy dostęp do tych folderów można uzyskać przez FTP, będzie to naprawdę zbyt wolne ...

Problemy z wydajnością tak naprawdę nie będą zależeć od systemu operacyjnego, ale od szybkości procesora systemu, pojemności dysku i pamięci. Jeśli masz tyle plików, możesz połączyć je w jedno archiwum i użyć systemu archiwizacji zoptymalizowanego do przechowywania dużej ilości danych. Może to być plik ZIP, ale jeszcze lepiej, przechowuj je jako obiekty BLOB w bazie danych z nazwą pliku jako kluczem podstawowym.

Wim ten Brink
źródło
Ale czy uzyskanie dostępu do pliku bezpośrednio usunie wąskie gardła w katalogach wyszukiwania, czy też dostęp do bezpośredniej linii nadal będzie wywoływał szukanie? (Linux, debian)
Steve
3
Bezpośredni dostęp do pliku złagodzi te problemy. Zrobiłem testy na ext3 i dostęp do pliku według nazwy w katalogu zawierającym 500000 plików nie jest znacznie wolniejszy niż ten zawierający 1000. Oczywiście robienie tego lsjest problemem.
davidsheldon
Znając dokładną nazwę, dostęp powinien być szybki. Problemem może być w większości dowolny kod lub polecenie, które chce uzyskać listę plików.
Wim ten Brink
1

Moją ogólną zasadą jest dzielenie folderów, jeśli istnieje więcej niż 1000 plików, a folder będzie przeglądany (tj. Przez Internet lub Explorer) lub 5000 plików w inny sposób.

Sygnał dźwiękowy
źródło
0

Jak wskazuje @skaffman, limity zależą od systemu operacyjnego. Ograniczenia w starszych systemach operacyjnych prawdopodobnie będą miały wpływ. Pamiętam, że stara wersja systemu Solaris była ograniczona do 32768 plików na katalog.

Typowym rozwiązaniem jest użycie pewnego rodzaju haszowania, tzn. Serwer Imrus Cyrus dzieli użytkowników według alfabetu:

/var/spool/imap/a/user/anna/
/var/spool/imap/a/user/albert/
/var/spool/imap/d/user/dan/
/var/spool/imap/e/user/ewan/
diciu
źródło
1
Dzięki, na pewno będę miał coś na swoim miejscu, gdy katalog będzie miał więcej niż 2k plików! :)
steve
To pytanie ma kilka dobrych odpowiedzi: serverfault.com/questions/95444/…
davey
Moja ogólna zasada jest taka, że ​​ponad 20 000 plików w katalogu nie jest dobrym pomysłem. Większość współczesnych systemów plików radzi sobie z tak wieloma plikami. Po trafieniu 32k plików w katalogu niektóre systemy plików, takie jak ext3, zaczną mieć poważne problemy z wydajnością.
Phil Hollenback,
Phil - czy masz jakieś informacje na temat problemów z wydajnością ponad 32k plików z ext3, obecnie nie widzę żadnych z ponad 300k plików Może to coś nie wpływa na mój wzorzec użytkowania.
davidsheldon
W mojej poprzedniej pracy oprogramowanie naukowe generowało wiele małych (po kilka k każdego) plików w katalogu. Zdecydowanie widzieliśmy, że czasy odczytu katalogu plików> 32k znacznie wzrosłyby. Samo uruchomienie „ls” w katalogu z tyloma plikami zajęłoby minutę lub dłużej.
Phil Hollenback
0

W przypadku bezpośredniego dostępu do pliku liczba plików w katalogu nie stanowi problemu z prędkością.

Liczba plików, które można utworzyć w jednym katalogu, zależy od używanego systemu plików. Jeśli wyświetlasz listę wszystkich plików w katalogu lub wyszukujesz, sortujesz itp. Posiadanie wielu plików spowolni te operacje.

gbjbaanb myli się w swojej odpowiedzi na temat maksymalnego rozmiaru pliku ext3. Zasadniczo ext ogólnie ogranicza liczbę plików na dysku. Nie możesz utworzyć więcej plików, niż masz i-węzły w tabeli i-węzłów. Ma rację, sugerując reiserfs dla większej wydajności w przypadku wielu plików

Janusz
źródło
0

Sprawdzony folder z plikami 10K w NTFS (Windows 7, 64-bitowy). Folder zawierający 10 000 obrazów w dowolnym widoku (lista, ikona itp.) Działa i przewija bez wyraźnego opóźnienia.

Vil
źródło