Zarządzam aplikacją zawierającą magazyn plików, w którym wszystkie pliki są przechowywane z nazwami plików równymi ich sumom MD5. Wszystkie pliki są przechowywane w jednym katalogu. Obecnie jest ich tysiące, ale wkrótce na serwerze powinny pojawić się miliony plików. Na obecnym serwerze działa Ubuntu 11.10 na systemie plików ext4.
Ktoś powiedział mi, że nie jest rozsądne umieszczanie wielu plików w katalogu, ponieważ spowoduje to znaczny wzrost czasu wyszukiwania i niezawodności (miał historię o maksymalnej liczbie plików, na którą może wskazywać pojedynczy katalog, co prowadzi do dużej listy z linkami). Zamiast tego zasugerował utworzenie podkatalogów z np. Podciągami nazwy pliku. Sprawi to jednak, że niektóre rzeczy w mojej aplikacji będą znacznie bardziej kłopotliwe.
Czy to nadal prawda, czy też nowoczesne systemy plików (np. Ext4) mają bardziej wydajne sposoby radzenia sobie z tym i naturalnie skalowane? Wikipedia ma pewne szczegóły na temat systemów plików, ale tak naprawdę nie mówi nic o maksymalnej liczbie plików na katalog ani o czasach wyszukiwania.
źródło
Nowoczesne systemy plików bardzo dobrze obsługują bardzo duże katalogi, nawet miliony plików. Ale konwencjonalne narzędzia nie. Na przykład wyświetlenie tak dużego katalogu z „ls” zajęłoby dość dużo czasu, ponieważ normalnie czytałby cały katalog i sortował go (chociaż możesz użyć ls -f, aby uniknąć sortowania). Pliki nie zaczną się wyświetlać, dopóki wszystkie nie zostaną odczytane. Podział nazw pomaga w niektórych przypadkach, ale nie we wszystkich (na przykład replikacja rsync może nadal wymagać zebrania całego drzewa nazw).
źródło
Czy zamiast tego sugeruję użycie bazy danych SQL? Prawdopodobnie przekształciłoby to postrzeganą słabość aplikacji w siłę.
źródło