Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Proszę o poradę: Dużo plików w jednym katalogu czy grupowanie ich w katalogach
Sztef89
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Proszę o doradzenie jak lepiej zrobić:

Mam masę plików o nazwach:
dsaf3jkbcs.1.jpg
dsaf3jkbcs.3.jpg
dsaf3jkbcs.4.jpg
...
4jb5kn53jj.1.jpg
4jb5kn53jj.3.jpg
4jb5kn53jj.4.jpg
...
itd.


Zastanawiam się jak lepiej zrobić aby strona chodziła wydajniej (zakłądając ze tych plików może być nawet 1000000).

1. Pliki umieścić w jednym katalogu, a żeby je wyświetlić to:
  1. $warunek = '../img/obrazki/'.$id.'*';
  2. $tmp = glob($warunek);
  3. potem w pętli odczytujemy pliki...


CZY

2. Pliki o tym samym ID umieszczać do folderu o tym ID ? - Nie trzeba by używać funkcji glob() do wyszukiwania plików bo linki mógłbym wygenerować. Ale czy ilość katalogów na serwerze może go spowolnić ?


Proszę o odpowiedzi jaka byłaby różnica między wydajnością obu tych rozwiązań i co by było lepsze.
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Pytasz o wydajność, a nie napisałeś najważniejszego, w jaki sposób korzystasz z tych plików w kodzie? To znaczy czy wczytujesz je partiami po np. 10-100 obrazków czy wybierasz kilka (5-20) i tylko tyle jest Ci potrzebne czy może potrzebne są Ci w jednej chwili wszystkie nazwy tych plików, np. sortujesz je alfabetycznie? Wszystko zależy od tego, w jaki sposób i jakie zadanie ma realizować Twój kod.
Go to the top of the page
+Quote Post
Sztef89
post
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Cytat(darko @ 25.11.2011, 18:33:21 ) *
Pytasz o wydajność, a nie napisałeś najważniejszego, w jaki sposób korzystasz z tych plików w kodzie? To znaczy czy wczytujesz je partiami po np. 10-100 obrazków czy wybierasz kilka (5-20) i tylko tyle jest Ci potrzebne czy może potrzebne są Ci w jednej chwili wszystkie nazwy tych plików, np. sortujesz je alfabetycznie? Wszystko zależy od tego, w jaki sposób i jakie zadanie ma realizować Twój kod.


Masz rację, napisałem zbyt ogólnikowo.
Pliki będę wyświetlał częściowo min 6 sztuk - w zależności ile ID będę miał do wyszukiwania, każde ID to 6 plików. Średnio jakieś 20-30 obrazków będzie wyświetlanych. Ale nigdy nie będzie takiej sytuacji żebym musiał wszystkie pliki wyświetlić itd.

Każdy plik składa się z: ID.numeru.rozszerzenia, np.: ssssakkk333.234.jpg

Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Przy takiej ilości obrazków i takiej operacji to raczej nie ma znaczenia czy masz wszystko w jednym worku czy skatalogowane. co innego, gdybyś musiał np. przeszukać wszystkie pliki po nazwie, to jeden worek wydaje się być tutaj lepszym rozwiązaniem.
Go to the top of the page
+Quote Post
Sztef89
post
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Cytat(darko @ 25.11.2011, 18:44:40 ) *
Przy takiej ilości obrazków i takiej operacji to raczej nie ma znaczenia czy masz wszystko w jednym worku czy skatalogowane. co innego, gdybyś musiał np. przeszukać wszystkie pliki po nazwie, to jeden worek wydaje się być tutaj lepszym rozwiązaniem.


czyli wyszukiwanie kilku plików które mają w nazwie dane ID, spośród ok 100 000 000 plików trwa prawie tyle co posiadając do nich gotowe adresy ? Rozumiem, że tu różnica to w kilkunastu milisekundach jest ? (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Tutaj troszkę o limitach..
Jeśli miałbyś je przekroczyć foldery będą dobrym rozwiązaniem.
Go to the top of the page
+Quote Post
darko
post
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Tak naprawdę nie musisz przeszukiwać wszystkich plików żeby stwierdzić czy podane dane wejściowe po odpowiednim sformatowaniu utworzą poprawną ścieżkę do pliku, skoro znasz reguły tworzenia nazwy pliku. Ja zrobiłbym to tak, że sprawdziłbym tylko czy plik istnieje w spodziewanej lokalizacji:
  1. $file = '/home/folder/ssssakkk333.234.jpg';
  2. if(is_file($file))
  3. {
  4. // tu operacje na znalezionym pliku
  5. }
  6. else
  7. {
  8. // niestety nie znaleziono pliku
  9. }

Podejrzewam, że glob, skacząc po różnych folderach zeżarłby znacznie więcej czasu/zasobów niż gdybyś szukał w tylko jednym folderze na dużej puli nazw, oczywiście to można sprawdzić pisząc jakiś krótki teścik na reprezentatywnej ilości plików.
// edit
Cytat(markonix @ 25.11.2011, 17:54:21 ) *
Tutaj troszkę o limitach..
Jeśli miałbyś je przekroczyć foldery będą dobrym rozwiązaniem.

Właściwie praktycznie jedynym sensownym.

Ten post edytował darko 25.11.2011, 17:57:17
Go to the top of the page
+Quote Post
Niktoś
post
Post #8





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Wyszukiwanie pliku w 100 000 000 plikach jest szybsze niż wyszykiwanie jednego pliku w podkatalogu z 6 plikami?
Dla mnie wydaje się to trochę niedorzeczne wręcz fenomenalne.
Go to the top of the page
+Quote Post
Sztef89
post
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Cytat(Niktoś @ 25.11.2011, 19:02:56 ) *
Wyszukiwanie pliku w 100 000 000 plikach jest szybsze niż wyszykiwanie jednego pliku w podkatalogu z 6 plikami?
Dla mnie wydaje się to trochę niedorzeczne wręcz fenomenalne.


nie gdy znasz ścieżkę do tego katalogu, a nie znasz dokładnych nazw plików w nim się znajdującym (IMG:style_emoticons/default/wink.gif)

Ograniczenia z linku powyżej myślę że nie są do osiągnięcia... FAT 32 ma ograniczenie 65535 plików w jednym folderze, tylko ciekawe jakiego systemu plików teraz serwery używają, ja nie miałem tego okazji sprawdzić ale wydaje mi się, że z tych excośtam, czyli linuxowych więc limit plików by mnie nie obowiązywał (IMG:style_emoticons/default/wink.gif)

Cytat
Tak naprawdę nie musisz przeszukiwać wszystkich plików żeby stwierdzić czy podane dane wejściowe po odpowiednim sformatowaniu utworzą poprawną ścieżkę do pliku, skoro znasz reguły tworzenia nazwy pliku. Ja zrobiłbym to tak, że sprawdziłbym tylko czy plik istnieje w spodziewanej lokalizacji:


FAKTYCZNIE !
katalog z plikami znam
początki plików znam
numerki ich znam 1-6

wiec faktycznie nic nie trzeba przeszukiwać (IMG:style_emoticons/default/biggrin.gif)

Załóżmy ze serwer pracuje na NTFS lub innym systemi plików gdzie limity są dla mnie nie do osiągnięcia. Co wtedy byście doradzili. Grupować pliki w katalogach czy wszystko pakować do jednego folderu ? (IMG:style_emoticons/default/smile.gif)

Ten post edytował Sztef89 25.11.2011, 19:05:51
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Grupować.

Teoretycznie niektóre FS-y nie mają limitów, ale z praktycznego punktu widzenia, ręczne listowanie (a czasem się przydaje, choćby do backupu), to mordęga.
Go to the top of the page
+Quote Post
thek
post
Post #11





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Grupować. Ktoś kto pisze o waleniu do jednego wora chyba zapomniał, że czasem jest konieczność zajrzenia na serwer przy pomocy ftp choćby. Gratuluję temu, kto będzie zaglądał do katalogu z milionem plików wewnątrz. Niech się spodziewa oczekiwania na samo wylistowanie tego kupę czasu. Już nawet nie mówię, że klienty ftp też mają limity i zobaczysz tylko X pierwszych plików.
Go to the top of the page
+Quote Post
abort
post
Post #12





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Krótki test: 60 tysięcy plików w katalogu. Najprostszy dostęp do listy wszystkich plików to wylistowanie wszystkich plików z poziomu systemu operacyjnego. Czas: 1.8 sekundy (Linux, Sempron 2500, dysk SATA, system plików ext3). Dołóż narzut na ftp (jak pisał thek) i nie wiem, ile czasu poczekasz na łączu. wylistowanie jednego pliku z konkretną nazwą oczywiście odbywa się momentalnie. Ale już przy 60k plików spowolnienie jest zauważalne. Przy liniowości spowolnienia na listing plików poczekałbyś pół minuty.

Wniosek: grupować.
Argument "ZA" - projektanci squida (proxy www) też używają grupowania - dwa poziomy katalogów i dopiero dalej plik (jest to sprawa do ustalenia w pliku konfiguracyjnym). I jest to dostępne odkąd pamiętam (czyli można uznać, że "od zawsze")
Go to the top of the page
+Quote Post
thek
post
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




No i nie zapomnij abort, że chyba każdy klient ma limit widocznych plików w katalogu. Niby FileZilla odczyta wszystkie jakie ale sam serwer FTP narzuca limity, które są zazwyczaj na kilka lub kilkanaście tysięcy. Pytanie więc teraz.. Czy masz dostęp do serwera na tyle, by mu zmienić ustawienia by "dla pewności" wytrzymał wylistowanie kilkunastu milionów plików? Poza tym... Ile to potrwa? Ja już przy kilkudziesięciu tysiącach mam kosmiczne oczekiwanie na odpowiedź serwera. A niestety zastałem taki skrypt, gdzie w katalogu pewnym mam kilkanaście tysięcy katalogów i zwyczajnie serwer FTP nie daje rady. Gdybym nie wiedział z góry skąd biorą nazwy to bym się po prostu pochlastał (IMG:style_emoticons/default/smile.gif) A tak z palca mogę je wpisać i wiem, że mi przejdzie gdzie trzeba. Tylko że nie zawsze to wiesz i to jest problem.
Go to the top of the page
+Quote Post
Niktoś
post
Post #14





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


@abort mówisz teraz o wylistowaniu,weź teraz wyszukiwanie 1 pliku z tej gromadki plików-ile to użytkownik sobie teraz poczeka,aż mu wynik zwróci??
W takich sytuacjach tylko katalogi.

Ten post edytował Niktoś 27.11.2011, 23:21:45
Go to the top of the page
+Quote Post
abort
post
Post #15





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


@thek, niktoś:
ależ ja doskonale o tym wiem. Bijemy pianę, a autor pierwszego posta i tak zrobi jak zechce. Najwyżej potknie się o własne błędy i będzie zmuszony do przeprojektowania aplikacji.
@thek: problemy z ftp nie są jedynymi - problemy dotyczą każdego sieciowego dostępu do plików (czy to ftp, czy samba, czy nawet wystawienie takiego katalogu via www). Po prostu każdy dostęp uwypukla jedne problemy bardziej, inne mniej.
Go to the top of the page
+Quote Post
Pilsener
post
Post #16





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Raz: nawet jeśli nie ma to wpływu na wydajność to dobrze jest pogrupować pliki
Dwa: dobrze je nazywać od ID albo tworzyć losową nazwę, wtedy plik o nazwie np. 123456.exe będzie w folderze 1/2/3 - ma to sens bo wiemy w jakim folderze szukać pliku o danej nazwie
Go to the top of the page
+Quote Post
thek
post
Post #17





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Pilsener: gdyby zmiana była stricte kosmetyczna, to ludzie olewali by to czy katalogować czy nie i robili co dla nich wygodniejsze,

@abort: Pozostałe zdania (od "Pytanie więc teraz...") pisałem już do autora, a nie Ciebie, ale źle to uwypukliłem (IMG:style_emoticons/default/smile.gif) Widzę od pierwszego posta, że wiesz o co chodzi w problemie i nie mam nic do zarzucenia Ci od strony merytorycznej.
Go to the top of the page
+Quote Post
Sztef89
post
Post #18





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Troszkę nie spodziewałem się, że rozmowa się tak rozwinie ale lepiej dla mnie i innych z podobnym problemem (IMG:style_emoticons/default/smile.gif)

W mojej sytuacji wygląda to tak, czy będę katalogował czy też nie to zawsze będę znał nazwy plików. Jeszcze w jednym skrypcie używam przeszukiwania (znam 90% nazwy pliku) ale to się zmieni.
Przez ftp raczej nie będę wchodził do tych katalogów, wiadomo. Obrazki mniej więcej pogrupowałem ale nadal ich mam sporo, największy katalog ma ok 100 000 plików (po jednym obrazku dla każdego ID dlatego bardziej pokatalogować się nie da).

Jeżeli chodzi o backupy to najlepiej po stronie serwera spakować zipem wszystko co chcemy i potem ten plik ściągnąć. A napisanie skryptu php do tego to pestka (IMG:style_emoticons/default/tongue.gif) Tylko ciekawe jak szybko trwa taka kompresja przy 1mln plików do 1MB każdy (IMG:style_emoticons/default/biggrin.gif)

Chciałbym podziękować wszystkim za rozmowę. Będę dążył do katalogowania wszystkiego na tyle ile się da. Myślę, że wszystkie niedoskonałości wyjdą w testach, jak będę miał problemy to będziemy dalej dyskutować (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
by_ikar
post
Post #19





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Szybkość kompresji plików zależy od tego jak one są wielkie. Ilość tych plików ma drugorzędne znaczenie IMO. Najgorzej się kompresuje obrazy, pliki audi/wideo. Jeżeli obrazy są niewielkie (powiedzmy po parę kilo) to idzie to dość sprawnie. Nie mam co prawda tyle plików co ty, bo mam koło 80k plików graficznych w jednym katalogu, to pakuje się w sumie dość szybko (IMG:style_emoticons/default/wink.gif) osobiście to nie zrobiłem tego w php z oczywistego problemu z timeout, tylko napisałem to w bashu, podpiąłem pod cron i późnymi nocnymi godzinami się archiwizuje, po czym wysyła na zdalny serwer ftp.
Go to the top of the page
+Quote Post
Sztef89
post
Post #20





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


faktycznie nie pomyślałem o timeout na serwerze, pracuje dużo na localhoscie, mam timeout na 24h ustawiony i się przyzwyczaiłem (IMG:style_emoticons/default/biggrin.gif)
Pewnie sposób backupu rozwiąże podobnie jak ty (IMG:style_emoticons/default/wink.gif) Dzięki za info

Ten post edytował Sztef89 29.11.2011, 22:31:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 12:16