Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Archiwum Pro _ Katalogowanie plików.

Napisany przez: MikroUser 1.11.2006, 12:24:27

Witam.
Przepraszam jeśli źle trafiłem.

Projekt oparty na php i PostgreSQL. Zakładam że będzie to duża baza!

Jest tabela użytkowników (ok. 20 - 30 tys.) Każdy użytkownik może wysłać pliki (zdjęcia) na serwer. Zakładam że tak około 50 zdjęć przypada na jednego użytkownika.

Nie wiem jak przechowywać przesyłane zdjęcia.

1) Czy jest sens dla każdego użytkownika zrobić swój własny folder na dysku? (Wtedy automatycznie mamy 20-30 tys. folderów).

2) Czy pogrupować te zdjęcia względem jakiegoś typu (ludzie, auta, przyroda itd.) i wrzucać do odpowiedniego katalogu? Wtedy w katalogu jakiejś grupy mamy ok. 400 tys. zdjęć.

Z czym sobie będzie lepiej (czytaj szybciej) radził system (raczej jakiś Linux, co dokładnie jeszcze nie wiem)?
A może jakieś inne rozwiązanie?

Dziękuję za odpowiedź.

PS. Aha no i dodam, że w bazie są przechowywane ścieżki do plików. Czyli każdy użytkownik, ma do każdego swojego pliku w bazie zapisaną ścieżkę, a pliki są przechowywane na dysku. Czy to jest dobre rozwiązanie? Chyba nie ma sensu pakować każdy plik do bazy jako blob ...

Napisany przez: cyphelf 1.11.2006, 13:02:01

Przy 400 tysiącach plików w jednym katalogu może być problem z czasami dostępów do plików. Niektóre systemy takiej ilości mogą nie obsłużyć.

W tym przypadku dobrym rozwiązaniem może być większe rozbicie struktury katalogów. Np. możesz to zrobić
w oparciu o kombinację kategorii i daty dodania pliku:

/nazwa_kategorii/2006/10/19/nazwa-pliku.xxx

Możesz też zrobić haszowaną strukturę katalogów, np. tak:

/c73/996/a95/7f0/710/nazwa-pliku.xxx

W tym przypadku obliczasz hash md5 unikatowego klucza z tabeli przechowującej informacje o plikach, a następnie na podstawie hasha generujesz sobie ścieżkę katalogów do pliku. Masz tu wtedy pełną dowolność
w kwestii ilości poziomów.

Napisany przez: dr_bonzo 1.11.2006, 14:58:40

Prosze poprawic tytul topiku (jest niezgodny z regulaminem) albo topik zostanie zamkniety.

// Tytul poprawiony.

Napisany przez: Neotion 2.11.2006, 19:51:40

A jaki system plików masz do wykorzystania?
Jak reiresrfs to nie powinno być żadnych problemów z dużą ilością plików / folderów.
A jakbyś tylko mógł reiser4 to już wogóle miodzio (tańczące drzewa itd).

Ogółem każdy user = katalog nie jest taki zły bo to tylko folderów się narobisz, a linux to akurat dobrze obsługuje. Pozatym duża ilość plików w katalogu do przerobienia wydaje mi się bardziej czasochłonna niż dużo katalogów (w linuxach jest katalog->i-węzły, dostanie się do katalogów nie jest trudne za to operacje na i-węzłach już są kronikowane co też zajmie trochę czasu, drzewo plików zaś sobie wesoło siedzi w superbloku i git).

Jedyne z czym mogą wystąpić problemy to fragmentacja (ale nie wiem czy już do reiser4 nie będzie programu defragmentacji), ale to i tak tylko "namiastka" problemu w reiserach, dobrze sobie radzą z fragmentacją same w sobie.

Za to o XFS nie wiem nic, a zachwalają go tongue.gif

Jako blob w bazie odradzam, tylko zamulisz bazę.

Napisany przez: dtb 4.11.2006, 20:46:30

ja proponuje na takiej zasadzie. jezeli user nazywa sie "idiota" to pliki trzymane sa w folderze: /i/di/ota

Napisany przez: raikou 4.11.2006, 21:32:55

Cytat(Neotion @ 2.11.2006, 19:51:40 ) *
Za to o XFS nie wiem nic, a zachwalają go tongue.gif

Właśnie do takich zastosowań, co znaczy dużo plików w katalogu. Wysoka szybkość dostępu do pliku (lepsza niż Reisera) ale np. nie obsługuje badblocków wychodząc z założenia że wtedy to już pora na nowy dysk. Osobiście używam i nie narzekam.

Napisany przez: thornag 7.11.2006, 11:01:58

Swego czasu mialem podobny problem, zastosowalem rozwiazanie podobne do tego proponowanego przez dtb z malo zmiana struktura u mnie jest taka,

Kod
users/j/ja/janek/
users/j/ja/january


Itp, w srodku mam jeszcze dodatkowe rozbicie na obrazy, pliki audio/video i dla xml. Wszystko wydaje sie dzialac dobrze, a czytelnosc jest wieksza niz w przypadku i/di/ota

Pozdrawiam.

Napisany przez: HomerWells 21.11.2006, 21:04:53

Witam
Ja właśnie zamierzam poprawić galerię, która stworzyłem z rok temu. Mam zamiar dodać kategorie, tyle tylko że nazwy kategorii będą w stylu 'Impreza z okazji tego czy owego', 'Andrzejkowa zabawa'.
Przechowywanie plików w tego typu katalogach wydaje mi się trochę hmm... dziwne snitch.gif Po przeczytaniu wcześniejszy postów zastanawiam się czy nie tworzyć nazw katalogów na postawie nazw kategorii za pomocą md5(). Chyba tp będzie dobre rozwiązanie. Pozostaje pytanie czy shaszowane 'katalogi' trzymać w bazie czy też obliczać w locie. W bazie pewnei nigdy nie będzie więcej zdjęć niż 500.

Napisany przez: MikroUser 22.11.2006, 09:30:10

HomerWells chcesz chaszować katalogi żeby nie było spacji w nazwach?

Ja w sumie trzymam nazwy katalogów w bazie. Ale nie wiem czy nie było by lepsze obliczanie tego w locie, zyskujesz na tym że nie musisz robić selecta do bazy.

Ja i tak muszę robić zapytanie do bazy, dlatego trzymam katalogi w bazie.

Napisany przez: HomerWells 23.11.2006, 16:58:14

Cytat(MikroUser @ 22.11.2006, 09:30:10 ) *
HomerWells chcesz chaszować katalogi żeby nie było spacji w nazwach?


Też ale chodzi również o polskie znaki diaktryczne. W nazwach imprez mogą się takie pojawić.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)