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)
Odpowiedzi:
Wydajność różni się w zależności od używanego systemu plików.
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).
źródło
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ć
rsync
cały katalog i nie mogę tego po prostu zsynchronizować z podkatalogiem zawierającym najnowszy tysiąc.źródło
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.
źródło
ls
jest problemem.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.
źródło
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:
źródło
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
źródło
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.
źródło