Ș I INFORMATICĂ DOMENIUL DE LICEN Ț Ă CALCULATOARE Ș I [613516]

UNIVERSITATEA BUCURE Ș TI FACULTATEA DE MATEMATICĂ
Ș I INFORMATICĂ DOMENIUL DE LICEN Ț Ă CALCULATOARE Ș I
TEHNOLOGIA INFORMA Ț IEI

LUCRARE DE LICENȚĂ

Platformă profesională de socializare pentru
muzicieni

Coordonator ș tiin ț ific:
Conf.dr. Alin Ș tefănescu

Absolvent: [anonimizat]
2017

Cuprins
INTRODUCERE 2
1. Tehnologii utilizate 3
1.1. Client ( Front-end ) 3
1.1.1. SASS (Syntactically Awesome Stylesheets) 3
1.1.2. ES6 4
1.1.3. VueJS 6
1.2. Server ( Back-end ) 8
1.2.1. PHP & Laravel 8
1.2.2. MySQL & Neo4J 10
1.2.3. Redis 11
1.3. Utilitare 11
2. Aplicație 12
2.1. Descriere generală 12
2.2. Scopul aplicației 12
2.3. Aplicații asemănătoare 12
2.4. Utilizarea aplicației 13
2.5. Specifica ț ii tehni ce 13
2.5.1. Arhitectura software 13
2.5.2. Baza de date 14
2.5.2.1. MySQL 14
2.5.2.2. Neo4J 14
2.5.3. Detalii implementare 15
3. Concluzii 15
4. Bibliografie 17

1

INTRODUCERE

Ideea de a creea o platformă profesională pentru muzicieni mi-a venit acum câ ț iva ani buni
când un prieten chitarist încerca să își formeze o trupă. Posibilită ț ile din vremea aceea erau
forum-urile, prietenii ș i anun ț urile în ziare sau pe rețelele de socia lizare. Din câte am observat
dura foarte mult până găseai persoana potrivită pentru ceea ce căutai. Lumea muzicii s-a
dezvoltat, numărul instrumentelor a crescut foarte mult iar genurile muzicale s-au împărțit în
foarte multe subcategorii. Pentru trupele ș i artiștii foarte cunoscuți nu prezintă o problemă
promovarea dar pentru cei mici ș i debutan ț i era o adevărată provocare. Acum, prin crearea
acestei platforme, artiștii din sfera muzicală își vor putea face auzită vocea de un public mult
mai larg, prin intermediul serviciilor de promovare, vor avea oportunități de a- ș i creea trupe
întâlnind al ț i muzicieni interesați ș i își vor putea îmbogăți numărul de fani prin expunerea
publică pe platformă.
În momentul de fa ț ă mai există două platforme pe pia ț ă, ce rivalizează direct cu ideea
proiectului, acestea fiind prezente de mai mult timp au reușit să capteze aten ț ia publicului, dar
nu au reușit sa găsească un echilibru bun prin serviciile pe care le livrează. Prima pe care
doresc să o menționez se numește Reverbnation – a fost creată în anul 2006 in SUA, fiind 1
cea mai “bătrână” a reușit să strângă un număr de aproximativ 90 de milioane de clienți de-a
lungul anilor având o prezen ț ă interna ț ională destul de puter nică. Cealaltă platformă se
nume ș te Fleeber , a fost creată în anul 2014 în Brazilia oferind solu ț ii avansate pentru 2
muzicienii din America de Sud, dar nu au reu ș it nici în momentul de fa ț ă să aibă o prezen ț ă
notabilă interna ț ională, pe ste 90% din utilizatori fiind situa ț i în Brazilia.
Studiind platformele men ț ionate mai sus, am putut veni cu idei de îmbunătă ț ire prin
eliminarea taxelor ș i tarifelor asupra serviciilor oferite muzicienilor ( Reverbnation ș i Fleeber
taxând pentru majoritatea serviciilor ) astfel dând o ș ansă mai mare persoanelor ce au o
situa ț ie financiară precar ă, venitul putând fi recuperat prin dona ț ii. În continuare, platforma
va oferi o interfa ț ă priete noasă cu utilizatorul prin implementarea tehniciilor de UX ( User
eXperience) ce va ajuta utilizatorul să- ș i găsească mai u ș or con ț inutul dorit, o problemă ce
am experimentat-o pe celalalte platforme unde explorarea con ț inutului este anevoioasă, fiind
u ș oară pierderea în detal ii ( cum ar fi “banere” publicitare, elemente de design stridente sau
pur ș i simplu o ordonare nu tocmai intuitivă a con ț inutului). Dorim ș i deschiderea unui sistem
de “User Support” unde utilizatorii pot veni cu feedback ș i sugestii de schimbare, astfel
platforma va fi mereu la zi cu cererile publicului ( dorind să men ț ionez faptul că
Reverbnation si Fleeber ducând o lipsă totală a unui astfel de sistem ).

1 https://www.reverbnation.com/
2 https://fleeber.com/
2

1. Tehnologii utilizate
Am ales să folosesc tehnologii cât mai noi deoarece am știut că procesul de dezvoltare al
aplicației va dura. Menținerea actualizată a tehnologiilor utilizate ne oferă pe deoparte,
accesul la cele mai noi tehnici ș i facilități iar pe de alta parte asigură securitatea platformei.
Un mare dezavantaj al tehnologiilor noi este lipsa documentației ș i a suportului comunității.
Publicarea aplicației cu un nivel de securitate scăzut ș i o func ț ionalitate lentă nu poate sa
ducă decât la eșec. Se cunoa ș te faptul că un utilizator nu va aștepta în medie mai mult de 3
secunde ca o pagina să înceapă să se încarce.
Mai jos sunt prezentate tehnologiile noi sau mai puțin cunoscute.
1.1. Client ( Front-end )
Pentru interfa ț a grafică cu utilizatorul, am ales un design web simplu, cu o structură intuitivă
ce va ajuta utilizatorii care nu au experien ț ă în navigarea pe pagini web, sa se descurce cu
u ș urin ț ă fără a fi nevoie de a li se arăta ceva, iar celorlal ț i făcându-le navigarea mai rapidă.
Interfa ț a va fi compatibilă ( pagină web “responsive” ) cu platformele mobile astfel eliminând
nevoia, momentan, unei aplica ț ii dedicate pentru dispozitivele mobile, fiind puse la dispozi ț ie
exact acelea ș i servicii. V oi opta pentru crearea unei aplica ț ii mobile dupa maturizarea
platformei reducând astfel volumul de muncă în etapa ini ț ială de dezvoltare.
Tehnologiile ce au luat parte la crearea interfe ț ei vizuale le voi prezenta în cele ce urmeaza,
arătând caracteristicile principale ș i motivul pentru care le-am ales.
1.1.1. SASS ( ​ S ​ yntactically ​ A ​ wesome ​ S ​ tyle ​ s ​ heets)
SASS ( ​ S ​ yntactically ​ A ​ wesome ​ S ​ tyle ​ s ​ heets ) este un pre-procesor CSS, o extensie a CSS,
care permite utilizarea unui limbaj mai puternic ș i inteligent decât simplul CSS. Acesta oferă
posibilitatea de a folosi una din următoarele sintaxe:
– SASS care este originală
– SCSS care a fost introdus în versiunea 3
Avantajele utilizării unui pre-procesor CSS sunt următoarele:
– Eliminarea repeti ț iilor din cod prin utilizarea func ț iilor sau a variabilelor ceea ce duce
la conceptul de DRY ( ​ Don’t repeat yourself ​ )
– Structurarea ș i organizarea mult mai buna a codului ceea ce ajuta la o întreținere mai
ușoară.
– Este ușor de setat
– Oferă posibilitatea utilizării unui “framework” precum Compass care va genera 3
automat prefixele specifice pentru fiecare furnizor ș i multe altele
Compilarea codului SCSS va rezulta într-un fișier CSS care va putea fi folosit pentru aplicație
în mod normal.
3 http://compass-style.org/
3

Ca alternative la pre-procesorul SASS sunt Less ș i Stylus.Printre diferențele dintre cele trei se
numără:
– limbajul în care au fost scrise: SASS – Ruby, Less – Javascript, Stylus – Javascript
– SASS este cel mai popular
– Stylus nu necesita “{ }” sau “;” deoarece se bazează pe indentare
– Sintaxa de declarare a variabilelor

// ​ SCSS
$ ​ mainColor ​ : ​ #0982c1 ​ ;
$ ​ siteWidth ​ : 1024 ​ px ​ ;
$ ​ borderStyle ​ : ​ dotted ​ ;

body ​ {
​ color ​ : $mainColor;
​ border ​ : ​ 1px ​ $borderStyle
$mainColor;
​ max-width ​ : $siteWidth;
}
// ​ Less
@ ​ mainColor ​ : # ​ 0982 ​ c1;
@ ​ siteWidth ​ : ​ 1024px ​ ;
@ ​ borderStyle ​ : dotted;

body ​ {
​ color ​ : @mainColor;
​ border ​ : ​ 1px ​ @borderStyle
@mainColor;
​ max-width ​ : @siteWidth;
}
// ​ Stylus
mainColor ​ = ​ #0982c1
siteWidth ​ = 1024 ​ px
$ ​ borderStyle ​ = ​ dotted

body
​ color ​ ​ mainColor
​ border ​ 1 ​ px ​ $ ​ borderSt

Codul de mai sus, după compilare, în format CSS va arăta astfel:

body ​ {
color ​ : ​ #0982c1 ​ ;
border ​ : ​ 1px ​ dotted ​ #0982c1 ​ ;
max-width ​ : ​ 1024px ​ ;
}
1.1.2. ES6
https://www.todaysoftmag.ro/article/1724/ecmascript-6-de-ce-si-cum-sa-il-folosim-in-prezent
– ce este si de ce l-am mentionat. pentru ca aduce multe imbunatatiri si featururi pe care
la folosim la greu
– ce featururi folosim

ECMAScript este standardul care define ș te limbajul de programare JavaScript. ECMAScript
6 (ES6) este ultima versiune a standardului care a fost introdusă în anul 2015, versiunea
anterioară fiind ECMAScript 5.
4

Men ț ionez ES6 deoarece acesta vine cu multe îmbunătățiri la procesul de dezvoltare u ș urand
scrierea codului ș i înțeleg erea acestuia. Mai jos voi prezenta elementele cheie ce m-au făcut
să aleg această tehnologie ș i pe care le-am folosit în cadrul platformei:
➔ Func ț iile Arrow ​ (Săgeată) sunt o nouă modalitate mai scurtă de a scrie func ț ii
anonime

​ // versiunea es6
[ ​ 1 ​ , ​ 2 ​ , ​ 3 ​ ].map(( ​ item, index ​ ) => {
​ return ​ item * ​ 2 ​ ;
});
// versiunea es5
[ ​ 1 ​ , ​ 2 ​ , ​ 3 ​ ].map( ​ function ​ ( ​ item, index ​ ) {
​ return ​ item * ​ 2 ​ ;
});

➔ Modulele ​ au fost schimbate în ES6 ele având o structură statică, adică importurile vor
fi analizate static în timpul compilării. Acesta este un avantaj major, deoarece
instrumentele de “linting” vor putea analiza mult mai bine codul.
Exporturile denumite arată a ș a:

// my_module.js
export ​ ​ function ​ helloWorld () {
​ console ​ .log( ​ 'Hello world' ​ );
}
export ​ ​ const ​ MY_CONSTANT = ​ 5 ​ ;
export ​ ​ let ​ loremIpsum = ​ 'dolor' ​ ;

Iar import din module va arăta:

// main.js
import ​ { helloWorld, MY_CONSTANT } ​ from ​ ​ 'my_module' ​ ;
helloWorld(); ​ // va afi ș a 'Hello world'
// sau import ă toate exporturile denumite
import ​ * ​ as ​ m ​ from ​ ​ 'my_module' ​ ;
m.helloWorld();

➔ Promises ​ sunt o alternativă la func ț iile “callbacks” pentru a tatona codul asincron
➔ Clasele ​ au fost introduse în ES6 pentru a ajuta scrierea si întelegerea codului ele fiind
în mare parte “syntactic sugar” deoarece acelasi tip de functionalitate ar fi putut fi
5

creată utilizând ES5, iar javascript are deja o mo ș tenire bazată pe prototip care poate
de asemenea să ofere o mo ș tenire clasică

ECMAScript 6 a fost aprobat oficial în 2015, dar va dura ceva timp până când navigatoarele
vor implementa în întregime toate caracteristicile, astfel o soluție pentru navigatoarele ce nu
suportă încă ES6 este de a folosi “transpilers” cum ar fi Babel JS sau Traceur , acestea sunt 4 5
compilatoare ( sau chiar platforme in cazul Babel JS ) ce compilează codul ES6 în cod
ECMAScript 5.
1.1.3. VueJS
VueJS este un framework pentru JavaScript, cu cod sursă deschis, progresiv, destinat
construirii interfe ț elor cu utilizatorul. VueJS mai func ț ionează ș i ca framework pentru
aplica ț ii web capabil sa c reeze aplicatii “single-page”. Fa ț ă de alte framework-uri monolitice,
Vue este proiectat sa fie adaptabil incremental. Într-o arhitectură MVC ( model ​ – ​ view-
controller ) el serve ș te înt r-o primă fază pentru partea vizuală (view) abordând în acela ș i
timp ș i ni ș te preocupări ale “controller-ului” permi ț ându-le utilizatorilor să primească
actualizări în timp real cu date prin intermediul metodelor specifice componentelor.

Motivele pentru care am ales utilizarea VueJS sunt:
– este o librărie de Javascript de mărime mică ( în momentul de fa ț ă ocupănd 19KB )
– simplificarea proiectării interfe ț ei grafice prin intermediul componentelor, UI
declarativ. “hot-reloading”, depanare avansată a codului etc.
– adăugarea de reactivitate simplă prin înlocuirea librăriei jQuery sau împreună cu
aceasta
Caracteristicile VueJS:
– ș abloane ​ ; utilizea ză ș abloane bazate pe HTML ce permit legarea declarării de creere
a DOM-ului (Document Object Model ) de instan ț a ( sau faza de “render” ) de date
ce stă la baza Vue-ului
– reactivitatea ​ ; este cea mai distinctă caracteristică legată de VueJS. Modelele sunt
obiecte Javascript simple, iar la modificarea lor se modifică ș i vederea. Vue prevede
reinterpretare optimizată direct “din cutie” fără a mai face alte modificări. În plus,
componentele tin mereu cont de dependin ț ele lor de reactivitate, astfel sistemul ș tiind
precis cand să reinterpreteze componentele.
– componente ​ ; acesta este cea mai puternică caracteristica a librăriei. Într-o aplica ț ie
vastă si complicată în care se poate încadra si acest proiect, este necesară divizarea
aplica ț iei în comp onente mici, de sine stătătoare si de multe ori reutilizabile ce sunt
u ș or de administra t.
Mai jos voi da un exemplu de componentă. Aceasta prezintă un buton ce afi ș ează pe ecran de
căte ori a fost apăsat acesta.
4 https://babeljs.io/
5 https://github.com/google/traceur-compiler
6

Vue.component( ​ 'buttonclicked' ​ , {
props: [ ​ "initial_count" ​ ],
data: ​ function ​ () { ​ var ​ q = { ​ "count" ​ : ​ 0 ​ }; ​ return ​ q;} ,
template: ​ '<button v-on:click="onclick">Clicked 0 times</button>'
,
methods: {
​ "onclick" ​ : ​ function ​ () {
​ this ​ .count = ​ this ​ .count + ​ 1 ​ ;
}
},
mounted: ​ function ​ () {
​ this ​ .count = ​ this ​ .initial_count;
}
});

– tranziții ​ ; ​ ​ Vue prevede o multitudine de efecte de tranzi ț ie când un obiect este inserat,
actualizat sau ș ters din DOM
– rutare ​ ; un dezavantaj al aplica ț iilor într-o singură pagină este inabilitatea de a oferi
link-uri exacte catre “sub”-pagini într-o pagină. Librăriile ca VueJS aduc o solu ț ie
printr-o interfa ț ă simplă pentru schimbarea a ceea ce este afi ș at pe pagina in func ț ie de
de calea URL-ului actual

În concluzie, VueJS este u ș or de folosit, se adaptează foarte bine pe orice tip de aplica ț ie ș i
oferă o structură clară asupra vederii ( view-ului ) aplica ț iei ceea ce m-a determinat să-l
folosesc ca framework front-end principal.
Alte “framework-uri” asemănătoare cu Vue care ar mai putea fi considerate sunt AngularJS 2
ș i React.
1.2. Server ( Back-end )
În continuare, pentru partea de server ( back-end ) aleg să prezint din două perspective
separate si anume mediul de dezvoltare local, iar apoi mediul public, cele doua folosind, în
anumite locuri, tehnologii diferite.
Începând cu dezvoltarea locală, am folosit Laravel Valet ca mediu de dezvoltare pentru
aplica ț iile bazate pe Laravel, baza de date fiind ț inută într-un fisier prin intermediul SQLite
pentru portabilitate ș i lucru simplificat, iar versionarea a fost realizată prin Git.
Mediul public va fi localizat pe cloud-ul AWS ( Amazon Web Services ) din motive de cost
redus, redundan ț ă sporită ș i u ș urin ț a de implementare a mediului oferită de interfa ț a grafică
AWS. Se vor folosi ma ș ini virtuale cu sistemul de operare CentOS, server-ul web folosit fiind
Nginx. Pentru partea de baze de date este folosit serviciul DaaS ( Database as a Service)
oferit de AWS, iar sincronizarea cu mediul de test local pe ramura de productie va fi realizata
tot prin Git.
7

1.2.1. PHP & Laravel
PHP este un limbaj de scripting cu cod-sursă deschis ( open source ) care a fost construit
pentru dezvoltarea aplicatiilor web, este utilizat pe scara larga ș i poate fi intregat în HTML.
Spre deosebire de alte limbaje pe care a ș fi putut sa le folosesc acesta are urmatoarele
avantaje:
★ Timpul de incarcare foarte scurt ⇒ ​ PHP rulează mult mai repede decât ASP, deoarece
rulează în spa ț iul propriu de memorie, în timp ce ASP utilizează un server de bază ș i o
arhitectură bazată pe COM.
★ Software mai ieftin ⇒ În lucrul cu PHP, majoritatea instrumentelor asociate
programului sunt open source, cum ar fi WordPress , deci nu trebuie platit pentru ele. 6
În ceea ce prive ș te ASP, este posibil să trebuiască să cumpăra ț i instrumente
suplimentare pentru a lucra cu programele sale.
★ Gazduire mai ieftina ⇒ programele ASP trebuie să ruleze pe servere Windows cu IIS
instalat. Companiile de gazduire au nevoie sa achizitioneze ambele componente
pentru ca ASP sa functioneze, ceea ce duce adesea la un cost mai ridicat pentru
serviciile de gazduire. Pe de altă parte, un PHP ar necesita doar func ț ionarea pe un
server Linux, care este disponibil printr-un furnizor de gazduire, fără costuri
suplimentare.
★ Flexibilitatea bazei de date ⇒ PHP este flexibil pentru conectivitatea bazei de date. Se
poate conecta la mai multe baze de date, ca mai frecvent utilizată fiind MySQL.
MySQL poate fi folosit gratuit. Dacă este folosit ASP, MS-SQL, trebuie achizi ț ionat
un produs Microsoft.
Pe langa toate acestea, de curand a aparut Laravel ( php framework ). Laravel este unul dintre
cele mai utilizate, ​ open source ​ framework pentru aplicatii web personalizate rapid ș i u ș or.
Programatorii prefera acest framework pentru performata, caracteristicile si scalabilitatea pe
care o ofera. Este bazat pe MVC ( model-view-controller ) ceea ce il face mult mai util decat
PHP simplu.
Cele mai folosite elementele cheie ale acestui framework sunt:
★ Logica aplicatiei ​ ⇒ Acesta poate fi implementat în orice aplicație, fie folosind
controller-ele, fie direct în declaratia de rute folosind sintaxa similara cu
framework-ul Sinatra . Laravel a fost proiectat cu programatorul în minte, oferindu-i 7
acestuia flexibilitatea de care are nevoie pentru a crea totul, de la site-uri foarte mici la
aplicatii masive.
★ Caching ​ ⇒ Caching-ul este o memorie temporară de stocare utilizată pentru stocarea
datelor pentru o perioadă ș i poate fi recuperată rapid. Este adesea folosit pentru a
reduce timpul necesar pentru a accesa baza de date sau alte servicii la distan ț ă. Acesta
poate fi un instrument minunat pentru a men ț ine aplica ț ia rapidă ș i receptivă
6 WordPress link
7 Sinatra link
8

★ Injectia dependin ț ei sau a metodei ​ ⇒ În Laravel containerul IoC( Inversion of
Control ) este un instrument puternic pentru gestionarea dependen ț elor de clasă.
Containerul IoC al Laravel este unul dintre cele mai utilizate caracteristici Laravel.
★ Rutarea ​ ⇒ Cu Laravel putem aborda cu ​ ușurință rutarea. Traseul poate fi declanșat
în aplica ț ie cu o fl exibilitate ș i un control bun pentru a se potrivi cu adresa URL.
★ Controlere ​ Restfull ​ ⇒ Acestea oferă un mod op ț ional de separare a logicii dintre
servirea cererilor HTTP GET ș i POST.
★ Testarea ș i depan area ​ ⇒ Laravel este construit cu testarea în minte, suportul pentru
testarea cu PHPUnit este inclus direct din “cutie” ș i un fi ș ier ​ phpunit.xml ​ este deja 8
setat pentru aplica ț ie.
★ Paginare automată ​ ⇒ simplifică sarcina de a implementa paginarea, înlocuind
abordările obi ș nuite de implementare manuală cu metode automate integrate în
Laravel.
★ Template Engine ​ ⇒ Blade este un motor templificator simplu, dar puternic, care 9
vine împreună cu Laravel. Spre deosebire de layout-urile controlerului, Blade ofera
posibilitatea de a defini i utiliza componente. Toate ș abloanele Blade ar trebui să
utilizeze extensia ​ .blade.php
★ Constructor de interogări pentru baze de date ​ ⇒ Generatorul de interogări de bază
de date al Laravel oferă o interfa ț ă convenabilă, fluentă pentru crearea ș i rularea
interogărilor bazei de date.
★ Multiple sisteme de fi ș ier ​ ⇒ Laravel 5 oferă suport nativ pentru multiple sisteme de
fie ș ere. Laravel fo lose ș te pachetul ​ Flysystem ​ al ter ț ilor pentru a oferi mai multe
suporturi pentru fi ș iere. Pute ț i utiliza orice spa ț iu de stocare local sau în Cloud pentru
a oferi o configura ț ie simplă.

Pe langa acestea, Laravel include multe alte caracteristici, iar cu fiecare versiune noua se
adauga altele. Acest framework oferă o pornire rapidă ș i sigură unei aplica ț ii noi.
În Laravel legatura dintre baza de date ș i aplicație se face cu ajutorul unui ORM ( Object
Relational Mapping ) denumit Eloquent. Acesta vine direct implementat în Laravel ș i ofera o
implementare eleganta ș i simpla a tehnicii de programare ActiveRecord. Fiecare tabela din
baza de date are un Model corespondent în aplicație.
ORM este o tehnica de programare ce face posibila accesarea ș i manipularea obiectelor fara
ca programatorii sa fie interesati din ce sursa provin aceste obiecte. Aceasta tehnica ajuta la
depasirea diferentelor de paradigma dintre modelul orientat pe obiecte ș i modelul relational.
Scopul ORM este de a crea o relatie transparenta, fiabila dar cel mai important naturala intre
atributele claselor definitre prin intermediul unui limbaj orientat pe obiecte ș i campurile
tabelelor din baza de date. Un framework ORM complet include urmatoarele functionalitati:
❖ un API pentru operatii CRUD ( create, read, update, delete)
❖ un limbaj pentru specificarea interogarilor adresand clasele persistente ș i atributele
acestora
8 PHPUnit link
9 Blade link
9

❖ un mod care sa faciliteze definirea metadata pentru maparitle dintre obiect ș i tabela
❖ o abordare consistenta a tranzactiilor, metodelor de stocare a datelor ș i a asocierulor
dintre clase
❖ tehnici de optimizare în functie de natura aplicatiei

10

1.2.2. MySQL & Neo4J
MySQL este un sistem de gestiune a bazelor de date ( SGBD ) relationale, dezvoltat de
Oracle . Este cel mai popular SGBD open-source la ora actuala, cel mai des intalnit cu
limbajul de programare PHP. În timp ce alte baze de date relationale au fost proiectate acum
cateva decenii pentru aplicatii ERP ( Enterprise Resource Planning ) complexe, MySQL a
fost proiectat ș i optimizat pentru aplicatii web. În momentul de fata MySQL se afla în
arhitectura a 9 din 10 site-uri din toata lumea dar si în aplicatiile multor corporatii.
Printre cele mai importante caracteristici ale unui SGBD sunt viteza, portabilitatea ș i
scalabilitatea. MySQL le ofera pe toate acestea fiind unul dintre cele mai rapide, este
disponibil pe orice sistem de operare fie ca e un sistem UNIX sau non-UNIX, mai mult de
atat este usor de scalat atunci cand nevoia de putere mai mare apare.
Principala caracteristica a bazelor de date relationale este posibilitatea de a adauga relatii
intre entitati ș i de a intero ga baza de date folosind acele relatii. Problema intervine în
momentul în care volumul de date interogate este foarte mare iar relatiile dintre acestea sunt
complexe, timpul de interogare cre ș te impreuna cu complexitatea interogarii.
Neo4J este un sistem de gestiune al bazelor de date graf, dezvoltat de Neo Technology, Inc,
foarte scalabil, construit pentru a gestiona nu numai datele cat ș i relatiile dintre acestea.
Baza de date graf este o baza de date sub forma de graf. În aceasta nodurile din graf descriu
entitatile în timp ce relatiile descriu asocierea dintre aceste noduri. Neo4J este o baza de date
graf populara, ca alternative sunt bazele de date Oracle NoSQL, OrientDB, HypherGraphDB,
GraphBase, InfiniteGraph ș i AllegroGraph.
Am ales Neo4J pentru urmatoarele avantaje pe care le ofera:

❖ Modelul de date flexibil ​ ⇒ Ofera un model de date flexibil, simplu dar totusi
puternic, care poate fi usor modificat în functie de necesitatile aplicatiei
❖ Afisari în timp real ​ ⇒ Ofera rezultate bazate pe date în timp real
❖ Disponibilitate ridicata ​ ⇒ Are o disponibilitate ridicata pentru aplicatii enterprise în
timp real cu posibilitatea de a executa tranzactii.
❖ Recuperare usoara ​ ⇒ Folosind Neo4J, nu numai ca se pot reprezenta dar ș i recupera
datele conectate mult mai rapid în comparatie cu alte tipuri de baze de date
❖ Limbajul de interogare Cypher ​ ⇒ Neo4J ofera un limbaj de interogare declarativ
pentru a reprezenta vizual graful, folosind sintax ascii-art. Comenzile acestui limbaj
sunt în format legibil ș i foarte usor de invatat.
❖ Inexistenta JOIN ​ ⇒ Folosirea Neo4J nu necesita interogări complexe cu “JOIN”
pentru a recupera datele deoarece este foarte simpla recuperarea nodurilor adiacente
sau a rela ț iilor.

Neo4J spre deosebire de alternative are urmatoarele caracteristici importante:
❖ Proprietati ACID ( Atomicity, Consistency, Isolation, and Durability )
11

❖ Scalabilitate ș i fiabilitate ​ ⇒ baza de date poate fi scalata prin cre ș terea numărului de
citiri / scrieri ș i a volumului fără a afecta viteza de procesare a interogărilor ș i
integritatea datelor. Neo4j oferă, de asemenea, suport pentru replicare pentru
siguran ț a ș i fiabilitatea datelor.
❖ Aplicație web incorporata ​ ⇒ Neo4j oferă o aplica ț ie Web încorporată Neo4j
Browser. Folosind acest lucru, pute ț i crea, interoga ș i vizualiza datele
❖ Drivere ​ ⇒ REST API, Cypher API, Native Java API
❖ Indexare ​ ⇒ Neo4j suporta Indexuri folosind Apache Lucence.
O comparatie mai clara asupra celor doua tipuri de baze de date se poate gasi în tabelul
urmator

RDBMS Graph Database
Tables Graphs
Rows Nodes
Columns and Data Properties and its values
Constraints Relationships
Joins Traversal

O baza de date de tip graf se poate gasi în practica în:
➔ Aplicatii de socializare
➔ Aplicatii din domeniul retelisticii ș i IT
➔ Sisteme de detectare a fraudelor
➔ Sisteme de management al identitatii ș i accesului
1.2.3. Redis
Redis este o bază de date în memorie ( RAM ) implementând un sistem de stocare cu perechi
de tipul cheie-valoare ( suportând ș i persisten ț ă pe disc ) folosit mai ales ca sistem de
caching.
Când stocăm date în orice varianta de sistem SQL, acestea sunt stocate pe disc, iar atunci
când interogăm baza de date, serverul realizează o căutare in fi ș ierele localizate pe disc în
func ț ie de interogare.
Cu Redis, datele se află toate (ideal) în memorie, făcând căutarea mult mai rapidă, dar în
acela ș i timp renun ț ând la caracteristicin specifice SQL ( rela ț ionarea tabelelor, interogări
complexe, chei străine etc ) pentru viteză de căutare.
Multe framework-uri folosesc Redis ca sistem de caching. Când se ruleaza interogări de baze
de date este bine ca rezultatele să se stocheze în in Redis de preferat într-un format
convenabil, cum ar fi format-ul JSON sau XML. Dacă ne imaginăm că avem o tabelă SQL
12

denumită ‘conturi’ ce con ț ine zece milioane de înregistrări si o tabelă ‘utilizatori’ ce con ț ine o
sută de milioane de înregistrări, fiecare cont fiind legat la câte un utilizator si încercăm sa
rulăm o interogare cu operatia JOIN în SQL, aceasta se va realiza (relativ) greu. Dacă
memorăm rezultatul interogării în Redis, cu o cheie unică ( ex: ‘conturi_123’ ) putem după
aceea sa le căutam într-o frac ț iune de timp. Redis suporta ș i ideea de expirare automată dupa
un anumit interval de timp, folosit atunci când datele vor să fie păstrare in memorie pentru un
anumit timp. Aceea ș i problemă o avem ș i în cazul cozilor de mes aje ce pot fi păstrate în
Redis pentru a îmbunăta ț ii viteza de căutare.
Am decis să folosesc Redis pentru optimizarea timpului de interogare, fiind o aplicatie ce
interoghează intensiv baza de date, acest lucru ar fi putut deveni o problemă reală foarte
repede, astfel păstrănd rezultatul interogărilor ca ș i con ț inut JSON am rezolvat pasul
interogărilor încete.

1.3. Utilitare
2. Aplicație
2.1. Descriere generală
2.2. Scopul aplicației
2.3. Aplicații asemănătoare
2.4. Utilizarea aplicației

2.5. Specifica ț ii tehnice

2.5.1. Arhitectura software

2.5.2. Baza de date

13

2.5.2.1. MySQL
2.5.2.2. Neo4J
2.5.3. Detalii implementare
3. Concluzii

14

4. Bibliografie
❖ Laracasts ( ​ https://laracasts.com ​ )
❖ Laracademy ( ​ https://laracademy.co ​ )
❖ The Majesty of Vue.js 2 – ​ Alex Kyriakidis ​ , ​ Kostas Maniatis ​ , and ​ Evan You
❖ Site PHP( ​ https://php.net ​ )
❖ Site Laravel ( ​ https://laravel.com ​ )
15

Similar Posts