Datalytics @ Roma Tre

Big Data, Prof. Torlone
a.a. 2013-2014
Davide Feltoni Gurini
CEO & Co-Founder
[email protected]
Summary
• Datalytics: Chi siamo
• MongoDB: perché
• MongoDB: esempio architettura
• MongoDB: vantaggi e svantaggi dell’approccio
What we do?
Brand Reputation
What we do?
Event Monitoring
How we do?
Artificial Intelligence
Products
Dashboard SaaS
Products
Widget aggiornati real-time
MongoDB
Perché
MongoDB
Perché
1. NoSQL
2.Ottimizzato per dati JSON (Twitter e Social)
3. Semplice da configurare: Primary e Replica set e
scalabile orizzontalmente: sharding.
4. Inserimento dati efficace per read rapide da
frontend per analitiche real-time.
Architecture
WebService
Crawler
Crawler
Dashboard
Analyzer
Client
Analyzer
Caso D’uso 1: Analisi Volumetrica
Datalytics Dashboard
Caso D’uso 1: Analisi Volumetrica
Analitiche su time-series
Caso D’uso 1: Analisi Volumetrica
Analitiche su time-series
Pre-aggregazione dei dati
1 documento per giorno per tipo di analisi:
1 doc per settimana
1 doc per mese
Si può aumentare granularità: 1 doc per ora,
etc..
Caso D’uso 1: Analisi Volumetrica
Caso D’uso 1: Analisi Volumetrica
Update
db.daily_analysis_531612369750dc242cc0f243.findAndModify(!
{"_id" : "10-03-2014/metric-1/entity-1/keywordMonitoring”}, !
{"$inc" : { "minute.14.15" : 1, "daily" : 1}}!
,false)
Caso D’uso 2: Top Contributors
Pre-aggregazione dei dati: CHIAVE-VALORE.
Aggregato per giorno, oppure per un doc per ogni ora a seconda delle esigenze
Caso D’uso 2: Top Contributors
Pre-aggregazione dei dati: CHIAVE-VALORE.
Aggregato per giorno, oppure per un doc per ogni ora a seconda delle esigenze
Caso D’uso 2: Top Contributors
Insert: caso base
findAndModify(query, update, upsert)
Caso D’uso 2: Top Contributors
Insert: caso base
findAndModify(query, update, upsert)
query: controlla se in daily.key non esiste quel ID
{ "_id" : "13-5-2014/metric-6/entity-0/keywordMonitoring" ,
"daily.key" : { "$ne" : “ID”}},
Caso D’uso 2: Top Contributors
Insert: caso base
findAndModify(query, update, upsert)
query: controlla se in daily.key non esiste quel ID
{ "_id" : "13-5-2014/metric-6/entity-0/keywordMonitoring" ,
"daily.key" : { "$ne" : “ID”}},
update: push nell’array il valore iniziale 1
{ "$push" : { "daily" : { "key" : "ID" , "value" : 1}}}
Caso D’uso 2: Top Contributors
Insert: caso generico
findAndModify(query, update, upsert)
Caso D’uso 2: Top Contributors
Insert: caso generico
findAndModify(query, update, upsert)
query: la push del caso precedente riporta una
eccezione quindi Key già esistente
Caso D’uso 2: Top Contributors
Insert: caso generico
come facciamo a fare una increment su un elemento
dell’array che non conosciamo??
findAndModify (query,update)
Caso D’uso 2: Top Contributors
Insert: caso generico
come facciamo a fare una increment su un elemento
dell’array che non conosciamo??
findAndModify (query,update)
query:
{ "_id" : “13-5-2014/metric-5/entity-2/", "daily.key" : "ID"}
Caso D’uso 2: Top Contributors
Insert: caso generico
come facciamo a fare una increment su un elemento
dell’array che non conosciamo??
findAndModify (query,update)
query:
{ "_id" : “13-5-2014/metric-5/entity-2/", "daily.key" : "ID"}
update
{ "$inc" : { "daily.$.value" : 1}}
l’operatore $ dopo la query ci riporta la
posizione dell’elemento con chiave ID
Caso D’uso 2: Top Contributors
find Top Contributors: frontend query
db.daily_analysis_53523218e4b0e700f3b12942.aggregate(
{ "$match" : { "_id" : "13-5-2014/metric-6/entity-0/keywordMonitoring"}} ,
{ "$unwind" : "$daily"} ,
{ "$sort" : { "daily.value" : -1}} ,
{ "$project" : { "key" : "$daily.key" , "tweet" : "$daily.value"}} ,
{ "$limit" : 10}
)
Vantaggi
Query Dinamiche: permettere ai
clienti di analizzare i dati nel dettaglio
Query veloci da frontend
(in proporzione la velocità delle read
aumenta molto)
Minimizzare delay tra dato acquisito e
dato visibile dal cliente
Svantaggi
Write Lock su collezioni:
risolto dalla 2.8
Write annidate più lente:
aumento in velocità delle
read in proporzione è
maggiore
Contacts
Davide Feltoni Gurini
CEO
davidefeltoni
[email protected]
twitter.com/datalyticsIT
facebook.com/datalyticsIT
plus.google.com/+DatalyticsIt/