Podczas tworzenia aplikacji internetowych często mamy pliki powiązane z wpisami do bazy danych, np .: mamy tabelę user
, a każda kategoria ma pole avatar
, które przechowuje ścieżkę do powiązanego obrazu.Co jest lepsze dla wydajności - wiele plików w jednym katalogu lub wiele podkatalogów z jednym plikiem?
Aby upewnić się, nie ma żadnych konfliktów w nazwach możemy albo:
- zmieniać nazwy plików w przypadku przesyłanego do
ID.jpg
; ścieżka będzie wtedy/user-avatars/ID.jpg
- lub utworzyć podkatalog dla każdej jednostki i pozostawić oryginalną nazwę pliku nietkniętą; ścieżka byłaby wtedy
/user-avatars/ID/original_filename.jpg
gdzie ID jest users
„s unikalny numer ID
Zarówno doskonale ważny z punktu widzenia logiki aplikacji widzenia.
Ale który z nich byłby lepszy z punktu widzenia wydajności systemu plików? Musimy pamiętać, że liczba wpisów category
może być bardzo wysoka (miliony).
Czy istnieje ograniczenie liczby podkatalogów, które może przechowywać katalog?
To zależy od systemu plików . – nouney
W przypadku niewielkich plików przeznaczonych głównie do odczytu (takich jak obrazy awatara), które nie zmieniają się często, użycie dedykowanego DB * może * mieć sens. Nawet lokalna instancja SQLite3 może być tego warta. Zobacz https://www.sqlite.org/intern-v-extern-blob.html - Ale w kontekście serwera WWW zasoby plików statycznych mają więcej sensu. –