Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak przesłać na FTP dużą ilość małych plików?
Forum PHP.pl > Forum > Serwery WWW
AboutMe
Witam,

Mam do przesłania kilkadziesiąt tysięcy małych (1-5kb) plików na serwer. Łącznie ważą 20 mb więc przesłanie ich powinno zająć niecałe pół godziny, jednak trwa to wiele godzin ponieważ total commander przy kazdym pliku odczekuje sekundę. Czy istnieje jakiś inny sposób na szybkie przesłanie dużej liczby małych plików?
sowiq
FileZilla -> ustawiasz np. 10 równoczesnych połączeń (w ustawieniach zaawansowanych połączenia) i w mgnieniu oka wszystko leci na serwer. BTW - najlepszy klient FTP z jakim miałem do czynienia.

[edit]
Tu masz pokazane jak ustawić ilość połączeń
ayeo
Witam!

FTP to dziwny protokół. W przypadku wielu plików więcej transferu zjedzą Ci komendy protokołu niż faktyczny plik. Najlepiej to spakować te pliki i wysłać jako jeden, a na serwerze rozpakować. Oczywiście warunkiem jest dostęp do shela.

Pozdrawiam!
AboutMe
Odpaliłem tą filezillę i idzie jak burza, akurat mam dozwolony limit połączeń do 8.
Aby mieć dostęp do shella niestety muszą przesłać dokumenty tożsamości do hostingu więc trochę zachodu jest.
erix
Cytat
Najlepiej to spakować te pliki i wysłać jako jeden, a na serwerze rozpakować. Oczywiście warunkiem jest dostęp do shela.

Bujasz. [;

Mnie też małe pliki denerwują, a rozwiązanie banalne: robisz TGZ z tymi plikami, kopiujesz na serwer i obok prosty plik PHP:
  1. <?php
  2. `tar -xzf plik.tgz`;
  3. ?>

i odpalasz przez przeglądarkę.

Proste, często działa (wymaga exec" title="Zobacz w manualu PHP" target="_manual) i praktycznie bezproblemowe, shella nie trzeba.
AboutMe
WTF? Widzę że filezilla ma limit do 2000 plików na katalog
Output truncated to 2000 matche

total commanderem wrzucałem po kilkadziesiąt tysięcy plików na 1 katalog a tu takie ograniczenie?
sowiq
Cytat(AboutMe @ 21.07.2009, 14:16:16 ) *
WTF? Widzę że filezilla ma limit do 2000 plików na katalog
Output truncated to 2000 matche
Output, czyli wyświetlanie. Jak Ci zacznie ładować listę 50k plików, to Ci się zdeczka komp przymuli :] Jestem pewien, że jak przeciągniesz cały katalog z tymi plikami, to wszystko Ci pobierze.

BTW - po co aż tyle plików w katalogu? Było kilka tematów na forum o wydajności systemu plików i wszyscy zgodnie pisali, że powyżej 1k plików na katalog szybkość odnajdowania plików leci na łeb...
AboutMe
Chyba faktycznie będę musiał zmniejszyć ilość plików na katalog. Przy 10k plikach za każdym razem ładuje thumb wielkości 100kb.
Fifi209
Cytat(AboutMe @ 21.07.2009, 13:16:16 ) *
WTF? Widzę że filezilla ma limit do 2000 plików na katalog
Output truncated to 2000 matche

total commanderem wrzucałem po kilkadziesiąt tysięcy plików na 1 katalog a tu takie ograniczenie?


Erix napisał Ci abyś spakował je i wypakował na serwie.

P.S. Po co Ci tyle tych pliczków?
AboutMe
Cytat
Erix napisał Ci abyś spakował je i wypakował na serwie.


Pliki już są na serwerze tyle że niewidoczne

Cytat
P.S. Po co Ci tyle tych pliczków?


Archiwum usenetu mam w nich.



Ma ktoś może link do tego testu wydajności?

Cytat
...testował chyba 100 000 (albo 1 000 000) plików o rozmiarze ~2kB. Trzymanie wszystkich plików w jednym katalogu okazało się najwydajniejsze...
erix
Może kiedyś tak było. Ale zważ na to, że współczesne systemy plików posiadają journaling, który nie jest bez wpływu na wydajność.
AboutMe
Mógłbym prosić o jeszcze 1 wyjaśnienie? Skoro mój hosting ogranicza wyświetlanie plików do 2000 sztuk na katalog, więc czy to w katalogu znajduje się 2.000 czy 10.000 plików to zawsze ładuje się thumb wielkości ~100kb więc czy to oznacza że obciążenie jest takie samo przy 2k i 10k plikach?

2. pytanie, czy ten thumb nie jest przypadkiem cashowany przez przegladarki lub roboty sieciowe? Bo np. klient FTP to cashuje.
erix
Cytat
~100kb więc czy to oznacza że obciążenie jest takie samo przy 2k i 10k plikach?

Jaśniej?

Cytat
2. pytanie, czy ten thumb nie jest przypadkiem cashowany przez przegladarki lub roboty sieciowe? Bo np. klient FTP to cashuje.

Zależy.
AboutMe
O ile dobrze rozumiem to obciążenie generuje wielkość pliku thumb. Jeśli wchodzę do katalogu który zawiera 2000 plików to ładuje się 100 kb komend, natomast jeśli w pliku znajduje się 10.000 plików to powinno się załadować 500 kb ale ładuje się 100 kb poniważ hosting wyświetla tylko 2000 plików. Więc obciążenie jest takie samo przy 2k plikach jak i przy 10k?
faran
Z moich obserwacji wynika, że sama ilość plików nie generuje obciążenia żadngo i nie ma pływu na działanie serwera...
Obciążenie generuje to co sie z nimi robi. Np. majac 10 000 plików w jednym katalogu przy zapytaniu typu: czy istnieje plik i następnie wyświetlenie go to obciążenie jest takie samo jak by ten plik był tylko sam w katalogu. Natomiast podczas zalogowania sie menedzerem ftp do katalogu z dużą ilością plików następuje odczyt nazw plików, ich rozmiary, daty modyfikacji itp. w tym przypadku ilość plików ma negatywny wpływ na działanie serwera(obciążenie). Ta sama zasada tyczy się robienia kopii zapasowych, jeśli jest ich dużo to serwer musi troche przetworzyć danych i robi sie to dość długo.
Kiedyś robiłem sporo testów tego typu i najefektywniejsze rozwiązanie to pliki w jednym katalogu tylko poprostu trzeba nimi mądrze zarządzać, aby nie zmuszać serwera do przetwarzania ich wszystkich.
aso824
Ja jakoś nie mogę sobie tego wyobrazić, jak by mi się przyciął klient FTP wbudowany w eksplorator systemowy gdybym otworzył taki katalog biggrin.gif (Linux Ubuntu).
Co do tematu: nie można tych plików połączyć w jeden (np. 10 plików łączonych w jeden) a potem je oddzielać skryptem? Takie rozwiązanie co prawda by ładowało calutki plik ale jak ktoś słusznie zauważył, koszt transferu by spadł (Wysłanie jednego pliku to chyba przynajmniej 3 komendy w FileZilli, w TotalCommanderze jest o parę więcej z tego co pamiętam), jeżeli ci na prędkości nie zależy.
Zanim poznałem bazy danych (i bylem baaardzo początkujący smile.gif ) robiłem bazy danych w plikach. Heh na 10 userów miałem ~500 plików w katalogu, wtedy nie znałem funkcji PHP. Ale znalazłem explode i udało mi się wyciągnąć ~50 plików smile.gif
erix
Cytat
Co do tematu: nie można tych plików połączyć w jeden (np. 10 plików łączonych w jeden) a potem je oddzielać skryptem?

Ok, ale pomyśl że masz te pliki modyfikować i co wtedy?
faran
Jeśli chodzi o wgrywanie plików na serwer to dobrym rozwiązaniem jest złączenie ich bo wtedy będzie dużo szybciej sie je wgrywało..... Jak łączyć to nie dziesieć, dwadziecia plików tylko do rozmiaru jakie pozwala łącze internetowe w efektywnym czasie wgrać je na serwer.
Ja wykorzystywałem łączenie plików, ale po to aby je ściągnąć z serwera. Ilość plików jakie miałem ściągnąć wynosiła kilkanaście tysięcy, po kilku godzinach ściągania doszłem do wniosku, że dużo szybciej jest coś napisać co je złączy i ściągnie na dysk lokalny. Jeśli chodzi o zarządzanie takimi złączonymi plikami na serwerze to nie wiem czy jest w tym sens, bo trzeba by je za każdym razem rozłączać, a to będzie zbędna operacja która będzie generować niepotrzebne obciążenie.
aso824
No cóż dawno to było jak ja takie numery robiłem i wtedy nawet nie orientowałem się co to transfer (o_O) i pracowałem na Win 98 tongue.gif
Do tematu: a zip-y odpadają? Na kompie wszystko spakować do zip-a (nawet z zerową kompresją) a na serwerze to rozdzielić (wiem, istnieją serwery bez tej funkcjonalności) za pomocą PHP - kiedyś tak robiłem gdy instalowałem phpBB - przy moim łączu to trwało (wrzucenie FTP) pół godziny a w zipie ok. 10-15 minut. Na serwerze się pisało skrypt który to rozdziela i oszczędzałem całe 10min no i się uczyłem ciekawych funkcji PHP smile.gif
erix
Cytat
Do tematu: a zip-y odpadają? Na kompie wszystko spakować do zip-a (nawet z zerową kompresją) a na serwerze to rozdzielić (wiem, istnieją serwery bez tej funkcjonalności) za pomocą PHP

Lepiej TAR, gdyż obsługa jest mniej problematyczna.
ayeo
Witam!

@erix, ale się czepiasz! Dla mnie możliwość wykonania exec, a dostęp do shella w tym kontekście to w zasadzie to samo.

Pozdrawiam!
aso824
Faktycznie, TAR lepszy - przyznaję rację, nawet w moim systemie (Linux) łatwiej i szybciej chodzą archiwa typu tar, bz itp. Swoją drogą to mnie to zdziwiło jak zrobiłem pomiar prędkości pakowania/odpakowywania archiwum tar, bz oraz zip i rar. Najszybszy tar, potem zip, bz, i na końcu rar. Mogę podać czasy dla przykładowego pliku smile.gif
A z taką ilością plików to ja bym szybciej chyba wysłał CD do admina mojego serwerka (akurat mam z nim dobry kontakt) aby wszystko wrzucił bezpośrednio tongue.gif by było szybciej gdyby ilośc pliczków > 15k. smile.gif
dr_bonzo
Tar jest najszybszy bo ... nie pakuje plikow tylko zlacza je w jeden.

Oczywiscie mozna nim od reki plik tez spakowac gzipem czy bzipem, ale glowne jego zadanie to wrzucic pliki w jeden.
AboutMe
Co jest nie tak z tym kodem?




  1. <?php
  2. /* example by Erik Jenssen aka erix */
  3.  
  4. $filename = "foobar.rar";
  5. $filepath = "/home/foo/bar/";
  6.  
  7. $rar_file = rar_open($filepath.$filename);
  8. $list = rar_list($rar_file);
  9. foreach($list as $file) {
  10. $entry = rar_entry_get($rar_file, $file->name);
  11. $entry->extract("."); // extract to the current dir
  12. }
  13. rar_close($rar_file);
  14.  
  15. ?>


Linijka

  1. $rar_file = rar_open($filepath.$filename);


Fatal error: Call to undefined function: rar_open() in /home/foo/bar/ on line 8
erix
Po polsku: NIE MA ROZSZERZENIA/BIBLIOTEKI RAR.
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.