Sunteți pe pagina 1din 9

Cercetare asupra dezvoltarii de

analiza a datelor din surse online si/


sau baze de date in vederea
elaborarii unor rapoarte si situatii
informative
ing. Militaru Bogdan Alexandru
Student Facultatea de Electronica Calculatoare si Telecomunicatii
Full Stack Developer - Airtouch New Media SRL
militaru.bogdanalexandru@gmail.com

Keywords: data analysis, cloud computing, analytics

1. Introducere
In cadrul acestei lucrari se vor prezenta notiuni teoretice si practice cu privire la modalitatea de
elaborare si implementare a unui robot / agent software pentru colectarea si analiza unor date in vederea
obtinerii unor profile de utilizatori si detalii despre activitatile desfurate de acestia in cadrul unei aplicatii
mobile, ce serveste ca scop la cumpararea de hrana, fast-food online.

Proiectul presupune interconectarea mai multor subsisteme constituente asa cum se poate observa
in figura urmatoare:

Acesta figura presupune procesul prin care datele colectate de la utilizatorul unui dispozitiv mobile, si
stocate in Amazon S3 Cloud prin intermediul unui SDK (Software Development Kit) numit Amazon
Mobile Analytics, datele sunt colectate zilnic de sistemul Process System, urmand ca mai apoi sa fie

Mobile Device
AWS S3 Process System Data Result

1
Generare statistici
Descarcare Descarcare per dispozitiv Upload fisiere
evenimente din detalii

AWS S3 dispozitive CSV in FTP

exportate rezultatele in format .csv pe un server FTP. Modul in care acest sistem opereaza va fi descris in
continuarea acestei lucrari.

In prima faza sistemul descarca toate evenimentele nou generate de utilizatori din Amazon S3
intr-o colectie Events, a bazei de date de tip Mongo, urmeaza apoi descarcarea noilor detaliilor despre
dispozitive nou inregistrate in platforma, dintr-o alta baza de date de tip mySQL, responsabila cu
gestionarea datelor din interiorul aplicatiei. Acest proces inregistreaza dispozitivele intr-o colectie numita
Profiles. Dupa ce toate datele au fost descarcate in sistem, sistemul incepe sa genereze statistici pe baza
acestor date, iar in final sunt generate fisiere .csv, care vor fi incarcate pe un server FTP, urmand sa fie
interpretate de personal. Printre tipurile de statistici se pot evidentia: cate vizite au fost efectuate in total
pentru un anumit produs, cate comenzi au fost generate in ultima luna de fiecare utilizator, care este
media de comenzi ale unui utilizator, care sunt cele mai cautate produse, etc.

2. Notiuni Teoretice despre tehnologiile utilizate


In cadrul acestui captiol vor fi prezentate notiuni teoretice despre tehnologiile utilizate pentru a
permite o mai buna intelegere a proiectului derulat si a modului in care acesta opereaza.

2.1. Amazon Mobile Analytics (Pinpoint)


Folosind Amazon Pinpoint se poate obtine o perspectiva asupra bazei de utilizatori, ai unei
aplicatii mobile, urmarind tendinte legate de implicarea acestora, compania de actiune, venituri si multe
altele. Pe masura ce utilizatorii interactioneaza cu aplicatia, aceasta poate raporta date catre Amazon
Pinpoint pe care le puteti vizualiza pentru a afisa nivelul de angajament. De exemplu, puteti vedea
diagrame care arata cati utilizatori deschid aplicatia in fiecare zi, orele in care utilizatorii deschid aplicatia
si veniturile generate de aplicatie. Daca vizualizati diagrame despre atributele dispozitivului, puteti afla
platformele si dispozitivele pe care este instalata aplicatia.

2
Puteti sa monitorizati analizele de campanie pentru a vedea cum functioneaza campaniile
dumneavoasta atat in agregat, cat si in mod individual. Puteti urmari numarul total de notificari push
trimise, procentajul notificarilor push care au dus la deschiderea aplicatiei, ratele de renunțare și alte
informații. Dacă ați creat o campanie care include un test A / B, puteti utiliza analizele pentru a compara
eficienta tratamentelor din campanie. De exemplu, puteti evalua dacă este mai probabil ca utilizatorii sa
deschidă aplicatia dumneavoastra ca urmare a unei variatii a mesajului de campanie. Puteti sa creati și sa
monitorizati canalele pentru a analiza cati utilizatori finalizeaza fiecare pas intr-un proces de conversie,
cum ar fi achizitionarea unui element sau actualizarea aplicatiei.

Pentru a analiza sau a stoca datele de analiza in afara Amazon Pinpoint, puteti configura Amazon
Pinpoint pentru a transmite datele catre Amazon Kinesis. Pentru a raporta valori din aplicatia
dumneavoastra mobila, aplicatia trebuie integrata cu Amazon Pinpoint prin intermediul unuia dintre SDK-
urile mobile AWS Mobile. [1]

2.2. Amazon S3
Amazon S3 stocheaza datele ca obiecte in cadrul unor resurse numite “buckets" (galeata). Puteti
sa stocati cat mai multe obiecte pe care le doriti intr-un bucket si sa scrieti, sa cititi si sa stergeti obiecte
din cupa. Obiectele pot avea dimensiuni de pana la 5 terabyte [2].
Puteti controla accesul la bucket (care poate crea, sterge si recupera obiecte din bucket, de
exemplu), sa vizualizeze jurnalele de acces pentru bucket si obiectele acesteia si sa aleaga regiunea AWS

3
unde este stocat un bucket pentru a optimiza latenta, pentru a minimiza costurile sau cerintele de
reglementare [2].

Beneficii:

• este conceput ca o platforma completa de stocare. Ia in considerare valoarea de proprietate inclusa la


fiecare GB [2].

• Simplitate - este construit pentru simplitate, cu o consola de administrare bazata pe web, o aplicatie
mobila si API complete si SDK-uri complete pentru integrare usoara cu tehnologii terte [2].

• Durabilitate - este disponibil in regiuni din intreaga lume si include redundanta geografica in fiecare
regiune, precum si optiunea de replicare in regiuni. In plus, mai multe versiuni ale unui obiect pot fi
pastrate pentru recuperare [2].

• Scalabilitate - Clientii din intreaga lume depind de Amazon S3 pentru a salva trilioane de obiecte in
fiecare zi. Costurile cresc si se micsoreaza la cerere, iar implementarile globale se pot face în cateva
minute. Industrii precum serviciile financiare, asistenta medicala, mass-media si divertismentul il
folosesc pentru a construi aplicatii de date mari, analize, transcodare si arhiva [2].

• Securitate - accepta transferul de date prin SSL si criptarea automata a datelor odata incarcate. Puteti, de
asemenea, sa configurati politicile de tip bucket pentru a gestiona permisiunile obiectului si pentru a
controla accesul la date, utilizand AWS Identity si Management Management (IAM) [2].

• Interogare in loc - Selectati datele proceselor dintr-un obiect stocat in repaus si Amazon Athena si
Amazon Redshift Spectrum va permit sa rulati analize sofisticate direct pe datele stocate în S3 [2].

• Integrare larga cu alte servicii AWS pentru securitate (IAM si KMS), alertare (CloudWatch, CloudTrail
si notificari de evenimente), computere (Lambda) si baze de date (EMR, Redshift), proiectate sa se
integreze direct cu Amazon S3 [2].

• Optiuni de migrare a datelor Cloud. Stocarea AWS include mai multe metode specializate pentru a va
ajuta să obtineti date in si din cloud [2].

• Gestiune flexibila de stocare. Caracteristicile de gestionare a stocarii S3 va permit sa luati o abordare


bazata pe date privind optimizarea stocarii, securitatea datelor si eficienta managementului [2].

2.3. Go (Golang)
Go (adesea denumit golang) este un limbaj de programare creat de Google in 2009 de Robert
Griesemer, Rob Pike și Ken Thompson. Este un limbaj compilat, format in mod static, in traditia lui Algol
si C, cu colectare de gunoi, cu structura limitata, cu caracteristici de siguranta a memoriei si functii de
programare concurente in stil CSP Instrumentul de compilare si alte instrumente de limba initial
dezvoltate de Google sunt gratuite si open source [3].

Go este recunoscut in traditia lui C, dar face multe schimbari pentru a imbunatati concizia,
simplitatea si siguranaa. Go constă din:

• O sintaxa si un mediu care adopta modele mai frecvente in limbile dinamice:


• Declaratie optionala de variabila concisa si initializare prin inferenta de tip (x: = 0 nu int x = 0; sau
var x = 0;) [3].
• Timpuri rapide de compilare [3].

4
• Managementul pachetelor de la distanta (go get) si documentatia pachetului online [3].
• Abordari distincte pentru anumite probleme:
• Primitive de concurenta incorporate: procese usoare (gorutine), canale si instructiunea selectata [3].
• Un sistem de interfata in locul mostenirii virtuale si incorporarea tipului in locul mostenirii non-
virtuale.
• Un lant de instrumente care, in mod implicit, produce binare native legate in mod static fara
dependente externe [3].
• Dorinta de a mentine specificatia lingvistica suficient de simpla pentru a ramane in capul unui
programator, partial prin omiterea unor caracteristici comune unor limbi similare [3].

2.4. MongoDB
MongoDB este o baza de date NoSQL open-source orientata pe documente. Acesta baza de date
beneficiaza de suport din partea companiei 10gen. MongoDB face parte din familia de sistemelor de baze
de date NoSQL. Diferenta principala consta în faptul ca stocarea datelor nu se face folosind tabele precum
intr-o baza de date relationala, MongoDB stocheaza datele sub forma de documente JSON cu scheme
dinamice [4].

MongoDB este o baza de date open-source NoSQL scrisa în C++. Aceasta poate contine mai
multe baze de date, colectii și indecsi. In unele cazuri (baze de date si colectii ) aceste obiecte pot fi create
implicit. Odată create, ele se gasesc in catalogul sistemului db.systems.collection, db.system.indexes.
Colectiile contin documente (BSON). Aceste documente contin la randul lor mai multe campuri. In
MongoDB nu exista campuri predefinite spre deosebire de bazele de date relationale, unde exista
coloanele care sunt definite în momentul in care tabelele sunt create. Nu exista schema pentru campurile
dintr-un document, acestea precum si tipurile lor pot varia. Astfel nu există operatia de „alter table” pentru
adăugare de coloane. In practica este obisnuit ca o colectie sa aiba o structura omogena, deși nu este o
cerinta, colectiile putand avea structuri diferite. Aceasta flexibilitate presupune usurinta in migrarea si
modificarea imaginii de ansamblu asupra datelor [4].

Caracteristicile MongoDB:

• Stocarea datelor sub formă de documente


• Baza de date MongoDB stocheaza obiecte (documente). Aceste documente reduc nevoia de join;
• Prezinta support pentru indexare:
• Indexarea pe fiecare din atribute se face in modul traditional (RDBMS) asupra cheilor de regasire ale
documentelor;
• Disponibilitate - Disponibilitatea datelor este asigurata printr-un proces automat de failover;
• Auto-Sharding
• Shardingul sau partitionarea datelor pe orizontala se face automat. Citirile si scrierile sunt distribuite
pe partitii. Lipsa joinurilor face ca interogarile distribuite sa fie rapide;
• Limbajul de interogare
• Limbajul de interogare este imbunatatit si pastreaza principii SQL si C++;
• Map Reduce
• MongoDB foloseste map/reduce pentru agregare si procesare batch;
• GridFS
• Poate stoca fisiere de dimensiuni mari fara a complica stiva de date;
• Suport
• Există o cantitate mare de informatii online – tutoriale , carti forumuri ce servesc pentru a asimila
rapid lucrul cu MongoDB. [4]

5
2.5. FTP (File Transfer Protocol)
Protocolul pentru transfer de fisiere (sau FTP, din engl. File Transfer Protocol) este un protocol
(set de reguli) utilizat pentru accesul la fisiere aflate pe servere din retele de calculatoare particulare sau
din Internet. FTP este utilizat incepand de prin anul 1985 si actualmente este foarte raspandit. Numeroase
servere de FTP din toata lumea permit sa se faca o conectare la ele de oriunde din Internet, si ca fisierele
plasate pe ele sa fie apoi transferate (incarcate sau descarcate). Webul nu aduce aici mari schimbari, ajuta
doar ca obtinerea fisierelor sa se realizeze mai usor, avand o interfata mai prietenoasa decat aplicatiile
(programele) de FTP. Este posibil sa se acceseze un fisier local prin adresa sa URL, ca si la o pagina de
Web, fie utilizand protocolul "file" (fisier), fie pur si simplu utilizand calea si numele fisierului. Aceasta
abordare este similara utilizarii protocolului FTP, dar nu necesita existenta unui server. Desigur
functioneaza numai pentru fisiere locale [5].

3. Mod de operare al sistemului


Modul in care aplicatia opereaza este unul foarte usor de descris, desi procesul este usor de
inteles, exista un numar foarte mare de procese care se fac in spate. Deoarece exista un numar atat de
mare, optimizarea algoritmilor care opereaza datele a reprezentat o munca asidua care continua fara
incetare, deoarece in fiecare zi numarul de date stocate de la aplicatiile mobile sunt tot mai mari.

3.1. Colectarea datelor in Cloud


Anterior au fost prezentate cele doua tehnologii, Amazon S3 si Amazon Pinpoint. Astfel procesul
prin care sunt colectate datele este unul elementar si consta in salvarea datelor in momentul in care un
eveniment a fost executat. Spre exemplu in mod automat la pornirea si inchiderea aplicatiei se executa
evenimente de start si stop a sesiunii de lucru.

Amazon Pinpoint permite crearea unor evenimente customizabile, astfel incat dezvoltatorii sa
poata defini propriile reguli ce vor trimite statistici in functie de activitatile desfasurate de utilizator. In
aplicatia curenta, fiind vorba despre o aplicatie de comanda de mancare si vizualizare de produse,
evenimente precum: vizualizare de produs, adaugare produse in cosul de cumparaturi, abandonare cos,
plata cos de cumparaturi, timp activ in aplicatie, timp in care aplicatia a rulat in background, locatii in
care s-a solicitat o comanda. Acest tip de evenimente sunt extrase din aplicatia mobila in momentul in
care un utilizator o foloseste si prin intermediul unui SDK sunt transmise automat catre cloud, unde sunt
stocate in format .gzip, in interiorul caruia datele sunt stocate in format .json, astfel procesarea ulterioara a
acestor date putand fi realizata cu usurinta. Stocarea datelor se face pe foldere avand urmatoarea structura
AN/LUNA/ZI/ORA.

3.2. Sincronizarea evenimentelor din S3 in baza de date


In cadrul acestei sectiuni evenimentele inregistrate de aplicatie sunt descarcate din S3 si sunt
stocate in baza de data locala de tip MongoDB, intr-o colectie ce poarta numele Events. Luand in
considerare ca in timp, pot exista foarte multe evenimente stocate in cloud si faptul ca nu este de interes
descarcarea evenimentelor anterioare, la fiecare sincronizare se verifica data de creare a ultimului
eveniment descarcat in baza de date locala, iar apoi sunt descarcate doar noile evenimente.

6
Tinand cont de faptul ca un singur utilizator poate genera printr-o simpla plimbare prin aplicatie
cateva 10, poate chiar 10 de evenimente, stocarea acestor fisiere nu se poate face intr-o structura de tip
vector sau matrice de obiecte, deoarece in acest fel memoria ram se poate umple cu usurinta, de asemenea
un alt aspect demn de luat in considerare este ca inserarea individuala a fiecarui eveniment descarcat din
S3 ar fi un proces cronofag, astfel ca am decis ca inserarea datelor sa se faca pe pachete, deoarece o
functionalitate de care mongoDB beneficiaza, este aceia de a grupa mai multe obiecte in Bulk-uri, iar apoi
acestea sa fie manipulate (inserate, actualizate, sterse). O astfel de optimizare a redus considerabil timpul
de sincronizare al aplicatiei.

3.3. Sincronizarea profilelor utilizatorilor in baza de date


Acest proces presupune descarcarea tuturor profilelor utilizatorilor, ce constau de fapt in date
despre dispozitive, nu date cu un caracter personal despre utilizator. Aceste date sunt stocate intr-o baza
de date, ce administreaza continutul aplicatiei. Sincronizarea presupune verificarea noilor dispozitive
adaugate in sistem si descarcarea acestora in baza de date locala, de tip mongoDB. Deoarece aplicatia are
aproximativ 5.5 milioane de utilizatori, procesul de sincronizare este cronofag, fapt pentru care, prima
regula de optimizare este acela de a verifica data calenadristica a ultimului dispozitiv adaugat si
descarcarea tuturor celor adaugate ulterior. De asemenea o alta optimizare consta in descarcarea unor
pachete de 999 de inregistrari si adaugarea lor multipla, ca Bulk, in baza de date mongoDB. Se va face de
asemenea o verificare, inainte de orice inserare, daca dispozitivul nu este duplicat, deoarece exista
posiblitatea ca un dispozitiv sa existe de mai multe ori in sistem.

3.4. Generarea statisticilor


Acest proces reprezinta de fapt cel mai indelungat proces si cel mai mare consumator de timp,
deoarece mongo db este o baza de date ce isi pastreaza datele in documente fizice pe disc, citirea datelor
fiind astfel unul indelungat, in contextul a 5 milioane de dispozitive, fiecare avand asignate sute sau mii
de evenimente. Pentru optimizarea sistemului se vor extrage evenimentele asignate unui dispozitiv, ca
bulk-uri si vor fi procesate manual, prin intermediul unor functii dezvoltate special, procesarea fiind mult
mai rapida, decat prin interogari pe baza de date, dupa procesarea acestor statistici pentru evenimentele

7
din ultimele x zile (unde x puate lua diferite valori, de preferat pe ultimele 30 de zile), se vor actualiza in
tabela profiles, pentru a putea fi exportate ulterior pe un server ftp.

3.5. Exportarea datelor in fisiere CSV pe serverul FTP


Deoarece tot acest sistem a fost creat in scopul de a ajuta la cresterea vanzarilor, evidentierea
produselor relevante pentru fiecare utilizator in parte si trimiterea unor notificari de tip push
personalizate, statisticile generate anterior si actualizate in tabela Profiles trebuiesc exportate in
fisiere .csv si incarca aceste fisiere pe serverul FTP.

Primul pas este de creare a fisierului pe discul local, caruia ii va fi atasat header-ul filei .csv.
Procesul continua prin selectarea unor Bulk-uri de profile ce vor fi adaugate prin adaugarea fiecarei linii
la fisierul curent. Aceasta tehnica este necesara, deoarece in cazul in care se doreste scrierea celor
aproximativ 5 milioane de profile, acest proces poate produce blocarea computerului, deoarece toate
datele vor fi scrise pe memoria ram, asa cum poate fi observat in imaginea urmatoare.

8
Dupa ce filele .csv sunt scrise, ele vor fi redenumite intr-un format de tip
APP_ZZ_LL_AAAA_timestamp.csv, pentru a diferentia fisierul curent de cele anterioare, existente pe
serverul FTP.

4. Concluzii
In final se poate spune ca obiectivul stabilit initial a fost atins, insa datorita cerintelor tot mai mari
in aceasta directie de analiza a datelor, se impune imbunatatirea sistemului existent. In prezent, datele sunt
procesate o singura data pe zi, iar dat fiind faptul ca sistemul realizat are un numar mare de date, se poate
intelege foarte usor ca intregul preoces este unul cronofag. O posibila solutie si cu grad ridicat de cerinta
din partea pietei o reprezinta procesarea in timp real, datale fiind colectate si stocate in cloud de indata ce
utilizatorul realizeaza o noua operatie, astfel se poate realiza acest proces de indata ce noi date apar. De
asemenea se doreste imbunatatirea sistemului prin procesarea ultimelor date aparute, nefiind necesara
procesarea tuturor datelor de fiecare data.

1. Amazon Pinpoint - https://docs.aws.amazon.com/pinpoint/latest/userguide/analytics.html


2. Amazon S3 - https://aws.amazon.com/s3/details/
3. Golang Wikipedia - https://en.wikipedia.org/wiki/Go_(programming_language)
4. MongoDB Wikipedia - https://ro.wikipedia.org/wiki/MongoDB
5. FTP Wikipedia - https://ro.wikipedia.org/wiki/File_Transfer_Protocol

S-ar putea să vă placă și