Schema baza de date Google Analytics

Incerc sa-mi dau seama care ar fi structura bazei de date (relatiile si modul de pastrare al acestora) a Google Analytics pentru un proiect asemanator.
Stiu ca au capacitate de procesare la discretie dar nu-mi inchipui cum scot rapoartele alea foarte complete intr-un timp foarte scurt. Sunt convins ca secretul nu sta in servere ci in modul de stocare a datelor, mod care le permite query-uri in moduri aproape nelimitate.
Din ce am invatat eu, schema se face in functie de niste nevoi initiale, dar nevoile lor sunt atat de complexe si diverse incat cu siguranta nu asa au gandit/gandesc.
Idei?

1 Like

o simpla cautare pe google dupa “how google analitics works” a returnat cateva chestii care cred ca te ajuta in prima faza:
https://support.google.com/analytics/answer/6081186?hl=ro
si
https://analyticsacademy.withgoogle.com/course01/unit?unit=3&lesson=1
poate ar fi util sa cauti si niste informatii legate de cum se proceseaza big data in cloud.

Am avut si eu intrebarea asta si nu am reusit sa ma lamuresc. Din cate i-mi dau seama e vorba de o “pregatire” a datelor, se face o agregare care sa ajute la rapoartele ulterioare, exemplu:
PageHits - pe o perioada anume, se face o tabela separata cu PageHits / minut care contine datele grupate pe minut.
Totusi asta nu explica anumite date care trebuiesc calculate “on the fly”, vizitele pe o perioada, recurring visits, …

sunt constient si de tehnica de preagregare din nosql dar din scenariile mele ajungi la o duplicare masiva a datelor

Am mai aflat aici niste chestii interesante: https://support.google.com/analytics/answer/2637192?hl=en&topic=2524483&ctx=topic#

si continuand aici: https://support.google.com/analytics/answer/1009671

Nu am stat sa ma uit la multe tutoriale, iti zic ce am facut intr-un proiect asemanator:

  1. un js care l-am pus pe multe saituri, care colecteaza date
  2. o baza de date de ‘raw’ (fix asa se numea) pentru stocare a datelor, cu multe tabele (aici vine ideea sa fie separata de restul, eventual un persistent memory storage, etc)
  3. un alt ‘parser’ care extragea datele din ‘raw’ si le punea in alte baze de date/tabele si facea procesarea.
    3.5. pe langa said parser, mai faceam si crawling pe alte saituri.
  4. viewer-ul???

Locul unde ma blochez e pasul 3, nu-mi dau seama cum trebuie procesate datele respective ca sa ai x dimensiuni care pot avea y valori.
Sa inteleg ca agregi toate combinatiile posibile?

ca sa un exemplu:
tabela de raw:

uuid | link | referer | useragent | ip | time

de aici le faceam separat, in tabela de de ‘useri’ bagam uuid, ip_id (ip-urile erau stocate separat), timp si useragent, dupa care scoteam din ip, locatia

in tabela de sites bagam id-ul from users si altele

ce nu iti iese?

un array serializat nu e bun (joke)