- Stefanescu Mihai a postat in Paginare in PHP
- johhny a postat in Paginare in PHP
- Stefanescu Mihai a postat in Cum pot afisa eroarea cand utilizatorul a scris un username gresit sau o parola gresita?
- madalin a postat in Cum pot afisa eroarea cand utilizatorul a scris un username gresit sau o parola gresita?
- Stefanescu Mihai a postat in Featureuri site
Serialized LOB design pattern in PHP
Design pattern-ul Serialized LOB (Large Object) este un pattern menit pentru stocarea obiectelor binare mari (BLOB) in baza de date. In loc sa salvam datele BLOB direct in baza de date, acest pattern ne indeamna sa stocam aceste informatii intr-un sistem de storage diferit, de exemplu am putea sa le salvam pe disk sau in cloud, apoi in baza de date sa salvam doar o referinta catre acest BLOB. Astfel putem sa ne scalam sistemul mai bine si sa avem performante mai bune, BLOB-urile putand fi tratate separat fata de baza de date. Acest pattern, de asemenea ajuta la scaderea dimensiunii bazei de date.
Acest design pattern este destul de simplu si cel mai probabil l-ati implementat, intr-o forma sau alta, dar nu stiati cum se numeste.
Un simplu exemplu pentru acest design pattern presupunea indeplinirea urmatorilor pasi:
1. Upload fisier binar (BLOB, de exemplu o imagine sau un video) pe un serviciu precum Amazon S3 (sau pe disk sau orice alt serviciu de cloud alegi).
2. Din raspunsul de la S3 luam URL-ul si il salvam in baza noastra de date.
3. Cand vrei sa folosesti acest fisier, poti lua informatiile de pe disk sau S3 (sau orice alt serviciu ai alege) on the fly.
Iata un simplu exemplu de cod:
/* Upload fisier binar (BLOB, de exemplu o imagine sau un video) pe un serviciu precum Amazon S3 (sau pe disk sau orice alt serviciu de cloud alegi).*/ $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1', 'credentials' => [ 'key' => 'YOUR_KEY', 'secret' => 'YOUR_SECRET', ], ]); $result = $s3->putObject([ 'Bucket' => 'my-bucket', 'Key' => 'large-file.jpg', 'Body' => fopen('path/to/large-file.jpg', 'r'), 'ACL' => 'public-read', ]); /* Din raspunsul de la S3 luam URL-ul si il salvam in baza noastra de date. */ $url = $result->get('ObjectURL'); $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'password'); $stmt = $pdo->prepare("INSERT INTO files (url) VALUES (:url)"); $stmt->execute(['url' => $url]); /* Cand vrei sa folosesti acest fisier, poti lua informatiile de pe disk sau S3 (sau orice alt serviciu ai alege) on the fly. */ $stmt = $pdo->prepare("SELECT url FROM files WHERE id = :id"); $stmt->execute(['id' => $file_id]); $url = $stmt->fetchColumn(); $file_data = file_get_contents($url);
Acesta exemplu de cod este cat se poate de simplist, dar in functie de nevoile pe care le ai in proiectul tau, acest pattern poate fi usor adaptat pentru a ajunge sa implementezi cerinta de business pe care o ai.
Comentarii
Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!