Imagini in baze de date

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

alopia
Junior Member
Mesaje: 36
Membru din: Dum Sep 02, 2007 10:53 pm
Contact:

Mesajde alopia » Vin Mar 13, 2009 8:19 am

AurelianToma scrie:1. daca folositi directoare nu inteleg de ce mai stocati si numele in dB ? Era suficient sha1($id); Extensia? $arrExtensii= array('gif', 'png....altele); foreach..arrExtensii...{<vezi_daca_exista_poza>}.
2.daca studiati putintel veti vedea ca mysql nu "oboseste" din cauza dimensiunilor pozelor CI mai degraba de la a)conexiuni_simultane b)setarea query-lor c)altele
3.a verificat cineva timpii de raspuns in cazul 1(cu baza) sau 2(cu directoarele)? Sa ridice mana sus!
4.baza nu era pe acelasi...hard?? sau (se pare) ca mysql nu stie sa optimizeze citirea unui fisier binar :roll:


Ha, ha, ha. Bestiala prima intrebare si simpla. Nu stiu cum nu m-am gindit si eu cind argumentam impotriva testului stupid facut.

Deci nu stocam pozele in database ca elucrubam ca e slow. In schimb stocam numele. Raspunsul la prima dumneavoastra intrebare cred eu e unul retoric. Bineinteles + timpii de raspuns la citirea bazei de date ajungem tot acolo.

La a patra intrebare as mai repeta posibilul avantaj in sensul ca baza de date o putem avea pe un alt server, eventual clustere de servere. Asadar lasam un hdd sa se streseze cu scripturile si alte hdd-uri cu citit poze. S-ar putea la final sa cistigam enorm viteza in cazul unui site under load. Asta ca sa nu mai vorbim ca se deschid tot felul de posibilitati mirifice de a realiza foarte usor o retea de clustere care ruleaza scripturile, toate folosind aceiasi baza de date (si ea pusa tot pe clustere).

Ce vreau sa accentuez din nou ca atunci cind e vorba de server load, se ajunge inevitabil la solutia distribuirii task-urilor si ferme de masinarii. Deci un test de tipul celui prezentat in topic facut pe o singura masina si un singur hdd isi pierde total sensul. Nu uitati si faptul ca degeaba citesti 1 milion de fisiere pe secunda pe o singura masina - mai trebuie sa le trimiti si prin placa de retea in exterior... care daca e una singura se gituie ca sopranele care si-au pierdut vocea. O sa aveti nevoie de un cor asadar sa va auda milioane de vizitatori cum cintati pardon cum serviti fisiere si bineinteles inevitabil un sistem de baza de date de genul celor inventate de marile companii.

Eu as concluziona la final ca viteza ... depinde. Adica daca servim un numar limitat de poze sistemul de fisiere nativ se poate dovedii mai rapid. Daca insa site-ul devine din ce in ce mai aglomerat putem ajunge paradoxal in situatia ca numai o baza de date sa ne ofere plusul de viteza datorita functionalitatilor si posibilitatea distribuirii task-urilor mult mai inteligent intr-o ferma de masinarii.



Pirahna
Senior Member
Mesaje: 5985
Membru din: Dum Aug 22, 2004 2:04 am
Localitate: la birou
Contact:

Mesajde Pirahna » Vin Mar 13, 2009 2:10 pm

AurelianToma scrie:1. daca folositi directoare nu inteleg de ce mai stocati si numele in dB ? Era suficient sha1($id); Extensia? $arrExtensii= array('gif', 'png....altele); foreach..arrExtensii...{<vezi_daca_exista_poza>}.
2.daca studiati putintel veti vedea ca mysql nu "oboseste" din cauza dimensiunilor pozelor CI mai degraba de la a)conexiuni_simultane b)setarea query-lor c)altele
3.a verificat cineva timpii de raspuns in cazul 1(cu baza) sau 2(cu directoarele)? Sa ridice mana sus!
4.baza nu era pe acelasi...hard?? sau (se pare) ca mysql nu stie sa optimizeze citirea unui fisier binar :roll:


Iti raspund eu la intrebari, ca eu folosesc baze de date + directoare.

1. Era suficient in unele situatii. Mie de exemplu nu imi place sa fac overwrite la imaginile existente, asa ca mereu cand e vorba sa mai adaug o imagine o sa adaug una cu un nume nou. Daca de exemplu id-ul este un primary key cu auto_increment eu as prefera sa editez doar numele fisierului decat sa fac alt id.

2. Eu nu am zis ca ar fi nepotrivit pentru asa ceva. Zic doar ca eu am web servere,file servere si database servere. File serverele ocazional au si cate un CDN atasat. De asta prefer sa tin fisierele cu fisiere, si bazele de date cu bazele de date. Si mai e vorba si de caching, etags, etc.

3. Nu, important este sa fiu multumit de structura si sa lucrez foarte rapid cu ea. Daca incep sa observ ca are latente, e timpul sa optimizez.

4. Aici nu am fost atent deci nu stiu ce sa-ti zic. :lol:

istvan
PHPRomania Supporter
Mesaje: 7
Membru din: Lun Aug 17, 2009 10:45 pm
Localitate: Cluj-Napoca

Mesajde istvan » Lun Aug 17, 2009 11:20 pm

categoric directoare!

nu 1 director ci mai multe!

fisierul care o salvezi are ceva ID si atunci pt fiecare 1000 faci un director
id=12345 --> images/0012/12345.jpg
daca sunt prea mutle fisiere intr-un director se incetineste "fopen"-ul
acest sistem de stocare a fisierelor o foloseste si squid (proxy sub linux) intre altele

NU e bun in baza pt ca!
1) dumpul poate fi prea mare. poate fi mai mare de 2G (alte probleme)

2) MySQL se "incetineste" ca QUERY CACHE-ul se umple cu prostii
adica nu merge cu viteza maxima cand e folosit un pic mai mult

3) Tre sa ai grija sa nu faci select * from produs ... ca vine si imaginea
de 2 ori -- > cu nume si cu cifra

4) Fisierul cand o citesti de pe disc (MYD) merge in php
in php se aloca memorie pt el de 2x
din php merge in apahce ...
nu este de ce sa faca atata drumuri in memorie

5) in anumite sisteme fisierele MYD au limita de 4G !!!!!
cu fisiere in BD foarte usor poti sa ajungi la aceasta limita -- daca exista

perseadrian
Average Member
Mesaje: 83
Membru din: Mar Iun 22, 2010 2:39 pm

Mesajde perseadrian » Lun Iul 05, 2010 10:48 pm

Evident ca directoare. Maresti baza de date inutil, o sa mearga mysql foarte greu.

Avatar utilizator
Digi
Average Member
Mesaje: 100
Membru din: Lun Mai 03, 2010 4:45 am
Localitate: Bucuresti
Contact:

Mesajde Digi » Mar Iul 06, 2010 6:23 am

Daca toate exemplele dinainte nu ti-au ajuns, sa-ti dau alt punct de vedere:

Img din foldere = webserver + download
Img din database = memorie sql + memorie script + write fisier temp + webserver + download

Deci oare care e mai fast.

Serios, umplii memoria de 2 ori cu prostii... una la mysql si alta la script, ca ambele incarca imaginile... multiplicat cu cate sunt pe pagina si multiplicat cu cate requesturi sunt... si BOOM ! :lol:

Tu te-ai gandit doar la tine, ca e mai "usor" sa administrezi... mai bine mai petreceai ceva timp si iti faceai un admin panel calumea sa faca el tot ce trebuie... upload/delete files si update sql ^^
Dar stai sa vezi la dumps si alea :lol:

Mie mi-e cam sila sa si insertez strings in sql, incerc sa-l fac cat mai mult din numere, decat atunci cand e absolut necesar (titles, text, names...)... si tu pui imagini :lol:
HGaming - Adunare pentru jocuri PC in retea

tpcasper
New Member
Mesaje: 2
Membru din: Lun Aug 09, 2010 9:59 am
Localitate: Focsani
Contact:

Mesajde tpcasper » Sâm Iul 16, 2011 12:35 pm

Cel mai bine pe hdd. Am experimentat si eu problema pusa de tine

Pentru citeva poze intr-o tabela e ok. Dar cand este vorba de un magazin nu mai merge.

Nu recomand.

Ce pot sa-ti recomand. Daca pentru un produs ai mai multe imagini creezi o coloana in tabela produse ex: image in care poti sa scrii: id_1.jpg,id_2.png,id_3.gif ... id_n.jpg pentru un produs

keen
Senior Member
Mesaje: 254
Membru din: Joi Ian 28, 2010 5:05 pm
Localitate: Br?ila
Contact:

Mesajde keen » Mar Apr 03, 2012 10:25 pm

Magic scrie:eu folosesc stocarea pozelor pe hdd, si cum multe persoane fac upload la poze incontinuu ... se pot nimerii nume identice .... :)
de aceea ... nici o poza nu ramane cu numele ei :)

$s1 = rand(1, 9999999999);
$s2 = rand(1, 9999999999);
$s3 = rand(1, 9999999);
....

salvez imaginea cu $s1."_".$s2."_".$s3.".jpg" .. si am rezolvat ..

chestia cu salvatul imaginii in db .. e cea mai mare prostie ... asta e parerea mea ... sincer .. e de ajuns ... id si numepoza ... atat ...

si asa am multe probleme cu db, pentru ca in permanenta se scrie in ea ...si nu o data la 1 min, ci cam 1000 de query-uri la 8 secunde ...

nu as face decat sa ingreunez ... totul .. cu toate ca serverul este un HP Proliant DL 580 G2 cu vreo 4 procesoare ... si asa db pica uneori


OFFTOPIC: Nu era mai bine : $nume_fisier=time(); ???

ONTOPIC: Lucrez la o firma media. Le-am facut site-ul si il si administrez (incarc materiale pe el) . Fotografiile sunt destul de mari. Dimensiunea bruta este undeva la 4mb / poza. Asta nu e problema... la upload in cp le fac de la rezolutie 3000 si ceva la 1280. Dupa aproape un an, am undeva la 6 gb fotografii si baza de date (chiar acum 3 ore i-am facut un export), 60,8 mb. Serverul e dedicat, probleme la incarcat baza de date din nou nu ar fi... 3-4 mb / sec upload, abonament bussiness... am lungit subiectul... daca faceam salvarea tuturor imaginilor in db, oare ce dimensiuni aveam acum ?
Parerea mea e ca in directoare e cel mai ok mai ales daca ai inspiratia sa faci totul cu cap.
Vrei sa stergi o intrare in db, verifici daca ai poza, dai unset la poza apoi delete la tot ce tine de id-ul respectiv.
Vrei sa incarci alta poza pentru id-ul respectiv (pe un profil de utilizator de exemplu) ... verifici daca are poza, dai unset si apoi preluezi imaginea noua.
Salvarea in directoare iar poate fi facuta cu cap. In cazul site-ului meu: /images/date("d-m-y")/time().jpg
inainte de a incarca poza, verifici daca exista folder cu data din ziua curenta. daca nu exista, creezi unul, daca exista, nu mai creezi.

ViezuREX
Senior Member
Mesaje: 502
Membru din: Joi Dec 13, 2012 1:35 pm

Re: Imagini in baze de date

Mesajde ViezuREX » Vin Ian 11, 2013 9:28 pm

Directoare pentru ca:

1 - Baza de date stocheaza informatiile ... unde? intr-un datafile pe HDD ... deci ajungi de unde ai plecat
2 - Serverul de MySQL ruleaza cu consum de resurse peste OS, de ce sa il incarcam cu ceva ce oricum face OS-ul

P.S. Magic, cred ca ar fi mai utila o redenumirea a upload-ului folosind ID-ul inregistrarii din DB + numele fisierului, eu personal asa fac si mi se pare mai OK.

GeorgeValentin
PHPRomania Supporter
Mesaje: 16
Membru din: Mie Aug 03, 2016 11:33 pm

Re: Imagini in baze de date

Mesajde GeorgeValentin » Vin Aug 05, 2016 11:33 am

daca le pui pe site ul propriu ai un plus in seo, poti aduce vizite din acele poze (trust me).
iar daca vrei sa faci thumbnail uri sau poze mai mici din poze mari, nu ti recomand sa faci un php script din asta.. in 10 rand uri poti face treaba asta direct cu js, mai exact cu canvas


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 35 vizitatori