Saper valutare la corretta soluzione NoSQL o soluzione Big Data per il proprio business è essenziale. Non tutti i datastore NoSQL sono uguali come non sono uguali le necessità di trattamento del dato nel proprio business. Cerchiamo di fare chiarezza sui temi principali del Big Data.
1. Roma - 24 Febbraio 2016
presenta Alberto Paro, BNova Technical Advisor
Piattaforme per i Big Data
2. Alberto Paro
Laureato in Ingegneria Informatica (POLIMI)
Technical Advisor per BNova
Autore di due libri su ElasticSearch + 6 Tech review
Lavoro principalmente in Scala e su tecnologie BD
(Akka, Spray.io, Playframework, Apache Spark) e NoSQL
(Cassandra, ElasticSearch e MongoDB)
Evangelist linguaggio Scala e Scala.JS
4. La ‘Datafication’
Actività
Conversazioni
Testo
Voce
Social Media
Browser log
Foto
Video
Sensori
Etc.
Volume
Veracity
Variety
Velocity
Big Data Analysing:
Text analytics
Sentiment
analysis
Face
recognition
Voice analytics
Movement
analytics
Etc.
Valore
Trasformare Big Data in Valore:
5. NoSQL - Definizione
Ogni database che non è un “Database relazionale”
Il termine fu coniato durante un meet-up
“Non-relational Databases”
Not Only SQL
8. NoSQL
Non esiste il “DB” che copre tutte le casistiche.
Ognuno ha caratteristiche proprie.
Il mercato sta effettuando “selezione naturale”
Spesso occorre utilizzare più di un NoSQL.
Hadoop e/o Spark sono il collante.
9. Hadoop / Spark
Input
Iter 1
HDFS
Iter 2
HDFS
HDFS
Read
HDFS
Read
HDFS
Write
HDFS
Write
Input
Iter 1 Iter 2
Hadoop MapReduce
Apache Spark
Evoluzione del modello Map Reduce
10. Apache Spark
Scritto in Scala con API in Java, Python e R
Evoluzione del modello Map/Reduce
Potenti moduli a corredo:
Spark SQL
Spark Streaming
MLLib (Machine Learning)
GraphX (graph)
11. Linguaggio - Scala
Nato da uno degli autori del compilatore di Java
Interoperabile con Java
Approccio Reattivo
Funzionale + Object Oriented + Actor Model
Concorrenza by design
Strong typed
Linguaggio base di Spark / Akka / Playframework
12. Linguaggio – Scala vs Java
public class User {
private String firstName;
private String lastName;
private String email;
private Password password;
public User(String firstName, String lastName,
String email, Password password) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.password = password;
}
public String getFirstName() {return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public Password getPassword() { return password; }
public void setPassword(Password password) { this.password = password; }
@Override public String toString() {
return "User [email=" + email + ", firstName=" + firstName + ", lastName=" + lastName + "]"; }
@Override public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + ((lastName == null) ? 0 : firstName.hashCode());
result = prime * result + ((password == null) ? 0 : password.hashCode());
return result; }
@Override public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
case class User(
var firstName:String,
var lastName:String,
var email:String,
var password:Password)
JAVASCALA
13. Scala.JS
Interoperabilità con Javascript
Permette di compilare codice Scala in
Javascript => Typesafe
Riuso di algoritmi/Modelli BK->FE
Sinergia con React.js
Permette lo sviluppo di SPA di grandi
dimensioni
Key Value:
Focus on scaling to huge amounts of data
Designed to handle massive loadBased on Amazon’s Dynamo paperData model: (global) collection of Key-Value pairs
Dynamo ring partitioning and replication
Big Table Clones
Like column oriented Relational Databases, but with a twist
Tables similarly to RDBMS, but handles semi-structured ๏Based on Google’s BigTable paperData model: ‣Columns → column families → ACL
‣Datums keyed by: row, column, time, index ‣Row-range → tablet → distribution
Document
Similar to Key-Value stores,but the DB knows what theValue is
Inspired by Lotus NotesData model: Collections of Key-Value collectionsDocuments are often versioned
GraphDB
Focus on modeling the structure of data – interconnectivity
Scales to the complexity of the dataInspired by mathematical Graph Theory ( G=(E,V) )
Data model: “Property Graph” ‣Nodes ‣Relationships/Edges between Nodes (first class) ‣Key-Value pairs on both‣Possibly Edge Labels and/or Node/Edge Types