![]() |
![]() ![]() |
![]() |
![]()
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:
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. |
|
|
![]()
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 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. 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 |
|
|
![]()
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.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 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. 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) |
|
|
![]()
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. |
|
|
![]()
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:
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 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 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
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. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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. |
|
|
![]()
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.
|
|
|
![]()
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") |
|
|
![]()
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.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
@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 |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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) |
|
|
![]()
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.
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 12:16 |