Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne] Katalogowanie zdjęć
Forum PHP.pl > Forum > Przedszkole
Poker
Witam wszystkich serdecznie,

Od dłuższego czasu próbuję stworzyć jak najbardziej optymalny sposób na posortowanie plików na serwerze.

W chwili obecnej jest to ~500 tysięcy zdjęć (dziennie jednak przybywa kilkanaście tysięcy).

Szukam optymalnego rozwiązania, przeglądając tutejsze forum znalazłem informację o testach wydajnościowych:

Cytat
1. Wszystkie pliki w jednym katalogu
2. Pliki rozmieszczone w katalogach względem nazwy, np:
przyklad.jpg => p/r/z/przyklad.jpg
inny.jpg => i/n/n/inny.jpg
3. Baza danych


I podobno 1wsza wersja okazała się najlepszym rozwiązaniem, niestety u mnie już są problemy z dostępem do folderów, dlatego trzeba jak najszybciej zmienić cały
system katalogowania plików.


Pliki są w rozmiarach ~20kb - 120kb (są to zdjęcia) + miniaturka ~4 - 6kb


Szukam najlepszych rozwiązań, niestety nie mogę znaleźć niczego co dałoby pewność iż po wdrożeniu uda się przyśpieszyć wczytywanie plików.

Na chwile obecną wszystkie zdjęcia przechowywane są na oddzielnym serwerze, pokatalogowane jest tylko według:
/photos/large
/photos/thumbs

/photos/users/large
/photos/users/thumb


Chciałbym zapytać czy ktoś z Was miał już podobny problem? Może zna jakieś rozwiązania w jaki sposób to zrobić aby było najwydajniejsze.
Ilość plików rośnie w ogromnym tempie jest to 450 tysięcy w ciągu ostatnich 26 dni, a tendencja jest ciągle wzrostowa i w ciągu ostatnich 24 godzin przybyło 26 tysięcy obrazów.

Jeżeli ktoś mógłby chociaż pomóc w tym w jaki sposób wyszukać informację na ten temat, ponieważ niestety nic nie mogę znaleźć, czym mógłbym się wzorować.

Dziękuje z góry za informację.
!*!
Zależy też jak sama aplikacja do zarządzania plikami jest zaprojektowana. Osobiście wrzucałbym wszytko w jeden katalog + 2gi na miniatury. A zarządzał tym z poziomu bazy + odpowiedni system cache lub jeśli masz taką możliwość rozbij to na kilka serwerów i wtedy byłby odwołania w jakimś zakresie (serwer 1: A-B, serwer 2: C-D itd). Nie ma złotego środka.
melkorm
Rozwiązaniem może być tworzenie katalogów na podstawie id zdjęcia, czyli strpad i dopełnienie zerami rozbicie na co 2 znaki i zrobienie z tego ścieżki do pliku, coś na wzór:
Kod
id = 1
pad = 00000001
path = 00/00/00/01.jpeg // albo nazwa pliku


Niestety tutaj jeszcze Tobie dochodzi sprawa miniaturek, moim zdaniem najlepiej przerzucić się na dynamiczne tworzenie miniaturek, w ten sposób oszczędzasz miejsce i sprawę tworzenia różnych miniaturek gdy dojdzie nowe wymaganie, osobiście na poziomie htaccess'a sprawdzam czy dany plik istnieje czy nie, jeżeli nie istnieje to tworzę przez skrypt w katalogu cache z odpowiednią strukturą katalogów (by przy tworzeniu ścieżki htaccess łapał że plik istnieje) do tego wysyłam nagłówek expire i przy następnym wejściu na stronę obrazek jest od razu serwowany z dysku bez użycia skryptu i w dodatku gdy użytkownik wszedł drugi raz to nawet nie leci zapytanie o obrazek tylko od razu jest serwowany z cache przeglądarki użytkownika - wzrost wydajności był bardzo zauważalny. Także co tydzień jest czyszczony cache miniaturek (około 10GB per week) w ten sposób oszczędzam miejsce ponieważ stare zdjęcia leżą na dysku tylko w postaci oryginalnej, a gdy zachodzi potrzeba są generowane odpowiednie miniaturki.

Ogólnie temat zdjęć i miniaturek i ich przechowywanie na dysku to dość trudny temat i szczerze bez głębszych informacji na temat przechowywania ich w bazie (czy przechowuje tylko nazwę czy ścieżkę relatywną czy absolutną) to ciężko coś więcej powiedzieć.

Jednak jeżeli masz tak wielki przyrost plików musisz to jakoś rozdzielić logicznie, szczególnie z miniaturkami bo to moim zdaniem jeden z większych problemów, dlatego preferuje dynamiczne tworzenie thumb'ów ponieważ odpada mi w większej części ten problem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.