Documente Academic
Documente Profesional
Documente Cultură
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
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
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:
• 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].
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:
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:
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].
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.
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.
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.
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.