SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
Schema Design
Senior Solution Architect, MongoDB Inc.
Massimo Brignoli
@massimobrignoli
Chi sono?
•  Solutions Architect/Evangelist in MongoDB Inc.
•  24 anni di esperienza nel mondo dei database e dello
sviluppo software
•  Ex dipendente di MySQL
•  In precedenza: web,web,web
Agenda
•  Che cos’è un Record?
•  Concetti chiave
•  Che cos’è un’Entità?
•  Associazione tra Entità
•  Suggerimenti generali
Tutto lo sviluppo di
applicazioni richiede
Schema Design
Il successo arriva da
Una struttura dati
appropriata
Che cos’è un Record?
Chiave → Valore
•  Storage mono-dimensionale
•  Il singolo valore e’un blob
•  Le query sono solo per chiave
•  Nessuno schema
•  I valore non può essere aggiornato ma solamente
sovrascritto
Key Blob
Relazionale
•  Storage bi-dimensionale (tuple)
•  Ogni campo contiene solo un valore
•  Query sono su ogni campo
•  Schema molto strutturato (tabelle)
•  Update sul posto
•  Il processo di normalizzazione richiede molte tabelle,
indici e con una pessima localizzazione dei dati.
Primary
Key
Documento
•  Storage N-dimensionale
•  Ogni campo può contenere 0,1,
tanti o valori incapsulati
•  Query su tutti i campi e livelli
•  Schema dinamico
•  Update in linea
•  Incapsulare i dati migliora la localizzazione dei dati,
richiede meno indici e ha migliori performance
_id
Innovation
Tante grandi innovazioni dal 1970…
Ma usereste una di queste
tecnologie per lanciare un
nuovo business oggi?
Incluso il modello relazionale dei dati!
Per quali computer è stato
pensato il modello
relazionale?
Questi erano i computer!
E lo Storage?
E come si sviluppava il software?
pio, il LISP (LISt Processing language) [24].
A quel tempo, i problemi significativi non ri-
denti con interfacce chiare e componibili. Si
diffusero concetti quali la programmazione
1
ei
gi
Processo Bisogno Linguaggio
1950
1960
1970
1980
1990
2000
Primi tentativi di “ordine”
nello sviluppo
Comprensibilità e portabilità del codice,
per sostenere la sua evoluzione
Organizzazione “industriale”
dello sviluppo dei sistemi software
Impossibilità di definire in modo
preciso il sistema da sviluppare
Sviluppo e distribuzione molto
rapidi e orientati ai sistemi
di comunicazione
Waterfall, a “V”, ...
Incrementale, Spirale, ...
Metodologie agili
Linguaggi assemblativi
Linguaggi di alto livello
Linguaggi strutturati
Linguaggi orientati agli oggetti
Linguaggi per lo sviluppo
dinamico
RDBMS Rende lo Sviluppo Difficile
Relational
Database
Object Relational
Mapping
Application
Code XML Config DB Schema
E Ancora Più Difficile Evolverlo…
New
Table
New
Table
New
Column
Name Pet Phone Email
New
Column
3 months later…
RDBMS
Dalla Complessità alla Semplicità..
MongoDB
{
_id : ObjectId("4c4ba5e5e8aabf3"),
employee_name: "Dunham, Justin",
department : "Marketing",
title : "Product Manager, Web",
report_up: "Neray, Graham",
pay_band: “C",
benefits : [
{ type : "Health",
plan : "PPO Plus" },
{ type : "Dental",
plan : "Standard" }
]
}
Concetti Chiave
Lo Schema Design tradizionale
è focalizzato
sullo STORAGE dei dati
Lo Schema Design a documenti
è focalizzato
sull’USO dei dati
I 3 Elementi fondamentali dello
Schema Design Documentale
1 – Flessibilità
•  Scelte per lo schema design
•  Ogni documento può avere campi differenti
•  I nomi di campi sono consistenti per la
programmazione
•  La struttura può essere forzata dall’applicazione
•  Facile da evolvere secondo necessità
2 – Arrays – Valori Multipli per Campo
•  Ogni campi può essere:
–  Assente
–  Settato a null
–  Settato a un valore singolo
–  Settato a un array con molteplici valori
•  Query per ogni valore:
–  Può essere indicizzato e ogni valore dell’array è nell’indice
3 – Documenti Incapsulati (embedded)
•  Un valore accettato è un documento
•  I documenti nidificati creano la struttura
•  Query di ogni campo ad ogni livello
–  Possono essere indicizzati
Che cosa è un’Entità?
Un’Entità
•  Un Oggetto del vostro modello
•  Ci sono Associazioni con altre entità
Referencing (Relazionale) Embedding (Documentale)
has_one embeds_one
belongs_to embedded_in
has_many embeds_many
has_and_belongs_to_many
MongoDB ha sia il referencing sia l’embedding per un uso generale
Modelliamo qualcosa assieme
Che ne dite di un biglietto
da visita?
Il nostro biglietto da visita….
Referencing
Indirizzi

{

“_id”: ,

“strada”:
,

“città”: ,

“stato”: ”,

“cap”: ,

“nazione”:
}
Contatti

{
“_id”: ,
“nome”: ,
“titolo”:
,
“azienda”: ”,
“telefono”: ,
“indirizzo_id”:
}
Embedding
Contatti

{
“_id”: ,
“nome”: ,
“titolo”:
,
“azienda”: ,
“indirizzi”: {

“strada”: ,

“città”: ,

“stato”: ,

“cap”: ,

“nazione”:
},
“telefono”:
}
Schema Relazionale
Contatti
•  nome
•  azienda
•  titolo
•  telefono
Indirizzi
•  strada
•  città
•  stato
•  cap
Contatti
•  nome
•  azienda
•  adress
•  Street
•  City
•  State
•  Zip
•  titolo
•  telefono
•  indirizzi
•  strada
•  città
•  stato
•  cap
Schema Documentale
In cosa differiscono? E Perché?
Contact
•  name
•  company
•  title
•  phone
Address
•  street
•  city
•  state
•  zip_code
Contact
•  name
•  company
•  adress
•  Street
•  City
•  State
•  Zip
•  title
•  phone
•  address
•  street
•  city
•  state
•  zip_code
Flessibilità dello Schema

{
“name”: ,
“title”:
,
“company”: ,
“address”: {

“street”: ,

“city”: ,

“state”: ,

“zip_code”:
},
“phone”:
}

{
“name”: ,
“url”: ,
“title”: ,
“company”: ,
“email”: ,
“address”: {
“street”:
,
“city”: ,
“state”: ,
“zip_code”:
}
“phone”: ,
“fax”
}
Esempio
Guardiamo come è fatta una
Rubrica
Rubrica
•  Quali sono le mie entità?
•  Quali sono le mie associazioni?
Tipico ERD di una Rubrica
Contacts
•  name
•  company
•  title
Addresses
•  type
•  street
•  city
•  state
•  zip_code
Phones
•  type
•  number
Emails
•  type
•  address
Thumbnails
•  mime_type
•  data
Portraits
•  mime_type
•  data
Groups
•  name
N
1
N
1
N
N
N
1
1
1
11
Twitters
•  name
•  location
•  web
•  bio
1
1
Associare le Entità
1-a-1
Contacts
•  name
•  company
•  title
Addresses
•  type
•  street
•  city
•  state
•  zip_code
Phones
•  type
•  number
Emails
•  type
•  address
Thumbnails
•  mime_type
•  data
Portraits
•  mime_type
•  data
Groups
•  name
N
1
N
1
N
N
N
1
1
1
11
Twitters
•  name
•  location
•  web
•  bio
1
1
1-a-1
Scelte di Schema Design
contact
•  twitter_id
twitter1 1
contact twitter
•  contact_id1 1
E’ ridondante tenere entrambe le relazioni
•  Entrambe devono essere aggiornate per consistenza
•  Posso risparmiare una lettura?
Contact
•  twitter
twitter 1
1-a-1
Consigli Generali
•  Tutto il contatto in un sol colpo
–  Il contatto embedda twitter
•  Relazione padre-figlio
–  “contiene”
•  Nessuna duplicazioni dei dati
•  Possibilie eseguire query o indicizzare il campo
incapsulato
–  Ad es.,“twitter.nome”
–  Eccezioni…
•  L’immagine del ritratto potrebbe essere troppo
grande
Contact
•  twitter
twitter 1
1-a-molti
Contacts
•  name
•  company
•  title
Addresses
•  type
•  street
•  city
•  state
•  zip_code
Phones
•  type
•  number
Emails
•  type
•  address
Thumbnails
•  mime_type
•  data
Portraits
•  mime_type
•  data
Groups
•  name
N
1
N
1
N
N
N
1
1
1
11
Twitters
•  name
•  location
•  web
•  bio
1
1
1-a-molti
Scelte di Schema Design
contact
•  phone_ids: [ ]
phone1 N
contact phone
•  contact_id1 N
E’ ridondante tenere entrambe le relazioni
•  Entrambe devono essere aggiornate per consistenza
•  Non possibile in un DB relazionale
•  E’ possibile risparmiare letture?
Contact
•  phones
phone N
1-a-molti
Consigli Generali
•  Tutto il contatto in un sol colpo
–  Il contatto incapsula molteplici telefoni
•  Relazione Padre-Figlio
–  “contiene”
•  Nessuna duplicazione di dati
•  Si possono eseguire query o indicizzare ogni campo
–  e.g., { “phones.type”: “mobile” }
–  Eccezioni…
•  Dimensioni: la grandezza massima di un
documento è 16MB
Contact
•  phones
phone N
molti-a-molti
Contacts
•  name
•  company
•  title
Addresses
•  type
•  street
•  city
•  state
•  zip_code
Phones
•  type
•  number
Emails
•  type
•  address
Thumbnails
•  mime_type
•  data
Portraits
•  mime_type
•  data
Groups
•  name
N
1
N
1
N
N
N
1
1
1
11
Twitters
•  name
•  location
•  web
•  bio
1
1
Molti-a-molti
Associazione del mondo relazionale
Join table
Contacts
•  name
•  company
•  title
•  phone
Groups
•  name
GroupContacts
•  group_id
•  contact_id
nei documenti si usano gli arrays
X
Molti-a-molti
Scelte di Schema Design
group
•  contact_ids: [ ]
contactN N
group contact
•  group_ids: [ ]N N
Redundant to track
relationship on both sides
•  Both references must be
updated for consistency
Redundant to track
relationship on both sides
•  Duplicated data must be
updated for consistency
group
•  contacts
contact
N
contact
•  groups
group
N
Molti-a-Molti
Consigli Generali
•  Dipende dai casi
1.  Rubrica semplice
•  I contatti referenziano i gruppi
2.  Gruppi di email corporate
•  I gruppi incapsulano i contatti per performance
•  Eccezioni
–  Scalabilità: dimensione massima documenti16MB
–  Scalabilità: può avere impatti sulle performance and sulle
dimensioni del working set
group contact
•  group_ids: [ ]N N
Contacts
•  name
•  company
•  title
addresses
•  type
•  street
•  city
•  state
•  zip_code
phones
•  type
•  number
emails
•  type
•  address
thumbnail
•  mime_type
•  data
Portraits
•  mime_type
•  data
Groups
•  name
N
1
N
1
twitter
•  name
•  location
•  web
•  bio
N
N
N
1
1
Modello del documento – Rappresentazione efficiente
Esempio di documento di un contatto
{

“name” : “Gary J. Murakami, Ph.D.”,

“company” : “MongoDB, Inc.”,

“title” : “Lead Engineer”,

“twitter” : {

 
“name” : “Gary Murakami”, “location” : “New Providence, NJ”,

 
“web” : “http://www.nobell.org”

},

“portrait_id” : 1,

“addresses” :
,

“phones” :
,

“emails” :


}
Working Set
Per ridurre le dimensioni del working set,considera
•  Referenzia i data grandi,e.g.,portrait
•  Referenzia i dati usati poco invece di embeddarli
–  Estraili in un documento figlio referenziato
Consigli Generali
Migrazione da schemi legacy
1.  Copiate lo schema esistente e qualche dato su
mongoDB
2.  Iterate lo sviluppo dello schema design
1.  Prima le associazioni one to one
2.  Poi le associazioni one to many
3.  Ed infine le associazioni many to many
3.  Migrate l’intero dataset al nuovo schema
L’applicazione è nuova? Embeddate di default
Embedding contro Referencing
•  Embedding è come fare un pre-join dei dati
–  Le operazioni su documenti BSON (Binary JSON) sono facili
per il server
•  Embed (90/10 regola del pollo)
–  Quando l’uno a molti sono oggetti visti nello stesso
contesto del padre
–  Per performance
–  Per atomicità
•  Reference
–  Quando avete bisogno di scalare maggiormente
–  Per consistenza nel molti-a-molti evitando di ripetere tanti
dati.
E’ Tutto nella Vostra Applicazione
•  Programmi + Database = Applicazioni Big Data
•  Programmi×MongoDB = Grandi applicazioni Big Data
Casi d’Uso comuni
High Volume Data Feeds
•  More machine forms, sensors & data
•  Variably structured
Machine
Generated Data
•  High frequency trading
•  Daily closing priceSecurities Data
•  Multiple data sources
•  Each changes their format consistently
•  Student Scores, ISP logs
Social Media /
General Public
Operational Intelligence
•  Large volume of users
•  Very strict latency requirements
•  Sentiment Analysis
Ad Targeting
•  Expose data to millions of customers
•  Reports on large volumes of data
•  Reports that update in real time
Real time
dashboards
•  Join the conversation
•  Catered Games
•  Customized Surveys
Social Media
Monitoring
Metadata
•  Diverse product portfolio
•  Complex querying and filtering
•  Multi-faceted product attributes
Product
Catalogue
•  Data mining
•  Call records
•  Insurance Claims
Data analysis
•  Retina Scans
•  FingerprintsBiometric
Content Management
•  Comments and user generated content
•  Personalization of content and layoutNews Site
•  Generate layout on the fly
•  No need to cache static pages
Multi-device
rendering
•  Store large objects
•  Simpler modeling of metadataSharing
Domande?
Grazie!!!
Senior Solution Architect, MongoDB Inc.
massimo@mongodb.com
Massimo Brignoli
@massimobrignoli

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (14)

Microsoft PowerPivot & Power View in Excel 2013
Microsoft PowerPivot & Power View in Excel 2013Microsoft PowerPivot & Power View in Excel 2013
Microsoft PowerPivot & Power View in Excel 2013
 
What is Power BI
What is Power BIWhat is Power BI
What is Power BI
 
Power BI Overview
Power BI OverviewPower BI Overview
Power BI Overview
 
Power BI Create lightning fast dashboard with power bi & Its Components
Power BI Create lightning fast dashboard with power bi & Its Components Power BI Create lightning fast dashboard with power bi & Its Components
Power BI Create lightning fast dashboard with power bi & Its Components
 
Design for Humans - Tech Vision 2017 Trend 4
Design for Humans - Tech Vision 2017 Trend 4Design for Humans - Tech Vision 2017 Trend 4
Design for Humans - Tech Vision 2017 Trend 4
 
Power BI
Power BIPower BI
Power BI
 
The Uncharted - Tech Vision 2017 Trend 5
The Uncharted - Tech Vision 2017 Trend 5The Uncharted - Tech Vision 2017 Trend 5
The Uncharted - Tech Vision 2017 Trend 5
 
Learn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&A
Learn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&ALearn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&A
Learn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&A
 
Microsoft Power BI Overview
Microsoft Power BI OverviewMicrosoft Power BI Overview
Microsoft Power BI Overview
 
Top 10 Cloud Trends for 2017
Top 10 Cloud Trends for 2017Top 10 Cloud Trends for 2017
Top 10 Cloud Trends for 2017
 
Power BI Made Simple
Power BI Made SimplePower BI Made Simple
Power BI Made Simple
 
State of Digital Transformation 2016. Altimeter Report
State of Digital Transformation 2016. Altimeter ReportState of Digital Transformation 2016. Altimeter Report
State of Digital Transformation 2016. Altimeter Report
 
Ecosystem Power Plays - Tech Vision 2017 Trend 2
Ecosystem Power Plays - Tech Vision 2017 Trend 2Ecosystem Power Plays - Tech Vision 2017 Trend 2
Ecosystem Power Plays - Tech Vision 2017 Trend 2
 
Introduction to Microsoft Power BI
Introduction to Microsoft Power BIIntroduction to Microsoft Power BI
Introduction to Microsoft Power BI
 

Ähnlich wie Schema Design

La Modernizzazione dei Dati come base per La Trasformazione Digitale
La Modernizzazione dei Dati come base per La Trasformazione DigitaleLa Modernizzazione dei Dati come base per La Trasformazione Digitale
La Modernizzazione dei Dati come base per La Trasformazione Digitale
MongoDB
 

Ähnlich wie Schema Design (20)

Strumenti Informatici per il Commerciale: CRM, Cloud, Social e Web
Strumenti Informatici per il Commerciale: CRM, Cloud, Social e WebStrumenti Informatici per il Commerciale: CRM, Cloud, Social e Web
Strumenti Informatici per il Commerciale: CRM, Cloud, Social e Web
 
Data modelling for Power BI
Data modelling for Power BIData modelling for Power BI
Data modelling for Power BI
 
Power B: Cleaning data
Power B: Cleaning dataPower B: Cleaning data
Power B: Cleaning data
 
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
2015-06 Roberto Boselli, Dal dato non strutturato alle ontologie
 
Power Platform: AI Builder la democratizzazione di AI
Power Platform: AI Builder la democratizzazione di AIPower Platform: AI Builder la democratizzazione di AI
Power Platform: AI Builder la democratizzazione di AI
 
Promozione dei contenuti web sui motori di ricerca - Eupolis Regione Lombardia
Promozione dei contenuti web sui motori di ricerca - Eupolis Regione LombardiaPromozione dei contenuti web sui motori di ricerca - Eupolis Regione Lombardia
Promozione dei contenuti web sui motori di ricerca - Eupolis Regione Lombardia
 
I Graph Database: analisi del comportamento degli utenti
I Graph Database: analisi del comportamento degli utentiI Graph Database: analisi del comportamento degli utenti
I Graph Database: analisi del comportamento degli utenti
 
Le basi della SEO | Quando il posizionamento ha un'anima
Le basi della SEO | Quando il posizionamento ha un'animaLe basi della SEO | Quando il posizionamento ha un'anima
Le basi della SEO | Quando il posizionamento ha un'anima
 
OpenData with Android Google Services by Pietro Alberto Rossi
OpenData with Android Google Services by Pietro Alberto RossiOpenData with Android Google Services by Pietro Alberto Rossi
OpenData with Android Google Services by Pietro Alberto Rossi
 
Big data e Business Intelligence | presentazione open day @Fondazione Kennedy...
Big data e Business Intelligence | presentazione open day @Fondazione Kennedy...Big data e Business Intelligence | presentazione open day @Fondazione Kennedy...
Big data e Business Intelligence | presentazione open day @Fondazione Kennedy...
 
Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...
Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...
Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...
 
La Modernizzazione dei Dati come base per La Trasformazione Digitale
La Modernizzazione dei Dati come base per La Trasformazione DigitaleLa Modernizzazione dei Dati come base per La Trasformazione Digitale
La Modernizzazione dei Dati come base per La Trasformazione Digitale
 
Linked data parliamo di semantica del web - v2
Linked data   parliamo di semantica del web - v2Linked data   parliamo di semantica del web - v2
Linked data parliamo di semantica del web - v2
 
Big data e business intelligence
Big data e business intelligenceBig data e business intelligence
Big data e business intelligence
 
Operational Data Store vs Data Lake
Operational Data Store vs Data LakeOperational Data Store vs Data Lake
Operational Data Store vs Data Lake
 
Introduzione alla Seo on page
Introduzione alla Seo on pageIntroduzione alla Seo on page
Introduzione alla Seo on page
 
Lezione 8 - Pratica - Il diagramma E-R
Lezione 8 - Pratica - Il diagramma E-RLezione 8 - Pratica - Il diagramma E-R
Lezione 8 - Pratica - Il diagramma E-R
 
Costruire un Recommendation Engine con Cosmos DB
Costruire un Recommendation Engine con Cosmos DBCostruire un Recommendation Engine con Cosmos DB
Costruire un Recommendation Engine con Cosmos DB
 
Il web intelligente
Il web intelligenteIl web intelligente
Il web intelligente
 
Analizzare un link con gli occhi di Google
Analizzare un link con gli occhi di GoogleAnalizzare un link con gli occhi di Google
Analizzare un link con gli occhi di Google
 

Mehr von MongoDB

Mehr von MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Schema Design

  • 1. Schema Design Senior Solution Architect, MongoDB Inc. Massimo Brignoli @massimobrignoli
  • 2. Chi sono? •  Solutions Architect/Evangelist in MongoDB Inc. •  24 anni di esperienza nel mondo dei database e dello sviluppo software •  Ex dipendente di MySQL •  In precedenza: web,web,web
  • 3. Agenda •  Che cos’è un Record? •  Concetti chiave •  Che cos’è un’Entità? •  Associazione tra Entità •  Suggerimenti generali
  • 4. Tutto lo sviluppo di applicazioni richiede Schema Design
  • 5. Il successo arriva da Una struttura dati appropriata
  • 6. Che cos’è un Record?
  • 7. Chiave → Valore •  Storage mono-dimensionale •  Il singolo valore e’un blob •  Le query sono solo per chiave •  Nessuno schema •  I valore non può essere aggiornato ma solamente sovrascritto Key Blob
  • 8. Relazionale •  Storage bi-dimensionale (tuple) •  Ogni campo contiene solo un valore •  Query sono su ogni campo •  Schema molto strutturato (tabelle) •  Update sul posto •  Il processo di normalizzazione richiede molte tabelle, indici e con una pessima localizzazione dei dati. Primary Key
  • 9. Documento •  Storage N-dimensionale •  Ogni campo può contenere 0,1, tanti o valori incapsulati •  Query su tutti i campi e livelli •  Schema dinamico •  Update in linea •  Incapsulare i dati migliora la localizzazione dei dati, richiede meno indici e ha migliori performance _id
  • 12. Ma usereste una di queste tecnologie per lanciare un nuovo business oggi?
  • 13. Incluso il modello relazionale dei dati!
  • 14. Per quali computer è stato pensato il modello relazionale?
  • 15. Questi erano i computer!
  • 17. E come si sviluppava il software? pio, il LISP (LISt Processing language) [24]. A quel tempo, i problemi significativi non ri- denti con interfacce chiare e componibili. Si diffusero concetti quali la programmazione 1 ei gi Processo Bisogno Linguaggio 1950 1960 1970 1980 1990 2000 Primi tentativi di “ordine” nello sviluppo Comprensibilità e portabilità del codice, per sostenere la sua evoluzione Organizzazione “industriale” dello sviluppo dei sistemi software Impossibilità di definire in modo preciso il sistema da sviluppare Sviluppo e distribuzione molto rapidi e orientati ai sistemi di comunicazione Waterfall, a “V”, ... Incrementale, Spirale, ... Metodologie agili Linguaggi assemblativi Linguaggi di alto livello Linguaggi strutturati Linguaggi orientati agli oggetti Linguaggi per lo sviluppo dinamico
  • 18. RDBMS Rende lo Sviluppo Difficile Relational Database Object Relational Mapping Application Code XML Config DB Schema
  • 19. E Ancora Più Difficile Evolverlo… New Table New Table New Column Name Pet Phone Email New Column 3 months later…
  • 20. RDBMS Dalla Complessità alla Semplicità.. MongoDB { _id : ObjectId("4c4ba5e5e8aabf3"), employee_name: "Dunham, Justin", department : "Marketing", title : "Product Manager, Web", report_up: "Neray, Graham", pay_band: “C", benefits : [ { type : "Health", plan : "PPO Plus" }, { type : "Dental", plan : "Standard" } ] }
  • 22. Lo Schema Design tradizionale è focalizzato sullo STORAGE dei dati
  • 23. Lo Schema Design a documenti è focalizzato sull’USO dei dati
  • 24. I 3 Elementi fondamentali dello Schema Design Documentale
  • 25. 1 – Flessibilità •  Scelte per lo schema design •  Ogni documento può avere campi differenti •  I nomi di campi sono consistenti per la programmazione •  La struttura può essere forzata dall’applicazione •  Facile da evolvere secondo necessità
  • 26. 2 – Arrays – Valori Multipli per Campo •  Ogni campi può essere: –  Assente –  Settato a null –  Settato a un valore singolo –  Settato a un array con molteplici valori •  Query per ogni valore: –  Può essere indicizzato e ogni valore dell’array è nell’indice
  • 27. 3 – Documenti Incapsulati (embedded) •  Un valore accettato è un documento •  I documenti nidificati creano la struttura •  Query di ogni campo ad ogni livello –  Possono essere indicizzati
  • 28. Che cosa è un’Entità?
  • 29. Un’Entità •  Un Oggetto del vostro modello •  Ci sono Associazioni con altre entità Referencing (Relazionale) Embedding (Documentale) has_one embeds_one belongs_to embedded_in has_many embeds_many has_and_belongs_to_many MongoDB ha sia il referencing sia l’embedding per un uso generale
  • 30. Modelliamo qualcosa assieme Che ne dite di un biglietto da visita?
  • 31. Il nostro biglietto da visita….
  • 32. Referencing Indirizzi { “_id”: , “strada”: , “città”: , “stato”: ”, “cap”: , “nazione”: } Contatti { “_id”: , “nome”: , “titolo”: , “azienda”: ”, “telefono”: , “indirizzo_id”: }
  • 33. Embedding Contatti { “_id”: , “nome”: , “titolo”: , “azienda”: , “indirizzi”: { “strada”: , “città”: , “stato”: , “cap”: , “nazione”: }, “telefono”: }
  • 34. Schema Relazionale Contatti •  nome •  azienda •  titolo •  telefono Indirizzi •  strada •  città •  stato •  cap
  • 35. Contatti •  nome •  azienda •  adress •  Street •  City •  State •  Zip •  titolo •  telefono •  indirizzi •  strada •  città •  stato •  cap Schema Documentale
  • 36. In cosa differiscono? E Perché? Contact •  name •  company •  title •  phone Address •  street •  city •  state •  zip_code Contact •  name •  company •  adress •  Street •  City •  State •  Zip •  title •  phone •  address •  street •  city •  state •  zip_code
  • 37. Flessibilità dello Schema { “name”: , “title”: , “company”: , “address”: { “street”: , “city”: , “state”: , “zip_code”: }, “phone”: } { “name”: , “url”: , “title”: , “company”: , “email”: , “address”: { “street”: , “city”: , “state”: , “zip_code”: } “phone”: , “fax” }
  • 39. Guardiamo come è fatta una Rubrica
  • 40. Rubrica •  Quali sono le mie entità? •  Quali sono le mie associazioni?
  • 41. Tipico ERD di una Rubrica Contacts •  name •  company •  title Addresses •  type •  street •  city •  state •  zip_code Phones •  type •  number Emails •  type •  address Thumbnails •  mime_type •  data Portraits •  mime_type •  data Groups •  name N 1 N 1 N N N 1 1 1 11 Twitters •  name •  location •  web •  bio 1 1
  • 43. 1-a-1 Contacts •  name •  company •  title Addresses •  type •  street •  city •  state •  zip_code Phones •  type •  number Emails •  type •  address Thumbnails •  mime_type •  data Portraits •  mime_type •  data Groups •  name N 1 N 1 N N N 1 1 1 11 Twitters •  name •  location •  web •  bio 1 1
  • 44. 1-a-1 Scelte di Schema Design contact •  twitter_id twitter1 1 contact twitter •  contact_id1 1 E’ ridondante tenere entrambe le relazioni •  Entrambe devono essere aggiornate per consistenza •  Posso risparmiare una lettura? Contact •  twitter twitter 1
  • 45. 1-a-1 Consigli Generali •  Tutto il contatto in un sol colpo –  Il contatto embedda twitter •  Relazione padre-figlio –  “contiene” •  Nessuna duplicazioni dei dati •  Possibilie eseguire query o indicizzare il campo incapsulato –  Ad es.,“twitter.nome” –  Eccezioni… •  L’immagine del ritratto potrebbe essere troppo grande Contact •  twitter twitter 1
  • 46. 1-a-molti Contacts •  name •  company •  title Addresses •  type •  street •  city •  state •  zip_code Phones •  type •  number Emails •  type •  address Thumbnails •  mime_type •  data Portraits •  mime_type •  data Groups •  name N 1 N 1 N N N 1 1 1 11 Twitters •  name •  location •  web •  bio 1 1
  • 47. 1-a-molti Scelte di Schema Design contact •  phone_ids: [ ] phone1 N contact phone •  contact_id1 N E’ ridondante tenere entrambe le relazioni •  Entrambe devono essere aggiornate per consistenza •  Non possibile in un DB relazionale •  E’ possibile risparmiare letture? Contact •  phones phone N
  • 48. 1-a-molti Consigli Generali •  Tutto il contatto in un sol colpo –  Il contatto incapsula molteplici telefoni •  Relazione Padre-Figlio –  “contiene” •  Nessuna duplicazione di dati •  Si possono eseguire query o indicizzare ogni campo –  e.g., { “phones.type”: “mobile” } –  Eccezioni… •  Dimensioni: la grandezza massima di un documento è 16MB Contact •  phones phone N
  • 49. molti-a-molti Contacts •  name •  company •  title Addresses •  type •  street •  city •  state •  zip_code Phones •  type •  number Emails •  type •  address Thumbnails •  mime_type •  data Portraits •  mime_type •  data Groups •  name N 1 N 1 N N N 1 1 1 11 Twitters •  name •  location •  web •  bio 1 1
  • 50. Molti-a-molti Associazione del mondo relazionale Join table Contacts •  name •  company •  title •  phone Groups •  name GroupContacts •  group_id •  contact_id nei documenti si usano gli arrays X
  • 51. Molti-a-molti Scelte di Schema Design group •  contact_ids: [ ] contactN N group contact •  group_ids: [ ]N N Redundant to track relationship on both sides •  Both references must be updated for consistency Redundant to track relationship on both sides •  Duplicated data must be updated for consistency group •  contacts contact N contact •  groups group N
  • 52. Molti-a-Molti Consigli Generali •  Dipende dai casi 1.  Rubrica semplice •  I contatti referenziano i gruppi 2.  Gruppi di email corporate •  I gruppi incapsulano i contatti per performance •  Eccezioni –  Scalabilità: dimensione massima documenti16MB –  Scalabilità: può avere impatti sulle performance and sulle dimensioni del working set group contact •  group_ids: [ ]N N
  • 53. Contacts •  name •  company •  title addresses •  type •  street •  city •  state •  zip_code phones •  type •  number emails •  type •  address thumbnail •  mime_type •  data Portraits •  mime_type •  data Groups •  name N 1 N 1 twitter •  name •  location •  web •  bio N N N 1 1 Modello del documento – Rappresentazione efficiente
  • 54. Esempio di documento di un contatto { “name” : “Gary J. Murakami, Ph.D.”, “company” : “MongoDB, Inc.”, “title” : “Lead Engineer”, “twitter” : { “name” : “Gary Murakami”, “location” : “New Providence, NJ”, “web” : “http://www.nobell.org” }, “portrait_id” : 1, “addresses” : , “phones” : , “emails” : }
  • 55. Working Set Per ridurre le dimensioni del working set,considera •  Referenzia i data grandi,e.g.,portrait •  Referenzia i dati usati poco invece di embeddarli –  Estraili in un documento figlio referenziato
  • 57. Migrazione da schemi legacy 1.  Copiate lo schema esistente e qualche dato su mongoDB 2.  Iterate lo sviluppo dello schema design 1.  Prima le associazioni one to one 2.  Poi le associazioni one to many 3.  Ed infine le associazioni many to many 3.  Migrate l’intero dataset al nuovo schema L’applicazione è nuova? Embeddate di default
  • 58. Embedding contro Referencing •  Embedding è come fare un pre-join dei dati –  Le operazioni su documenti BSON (Binary JSON) sono facili per il server •  Embed (90/10 regola del pollo) –  Quando l’uno a molti sono oggetti visti nello stesso contesto del padre –  Per performance –  Per atomicità •  Reference –  Quando avete bisogno di scalare maggiormente –  Per consistenza nel molti-a-molti evitando di ripetere tanti dati.
  • 59. E’ Tutto nella Vostra Applicazione •  Programmi + Database = Applicazioni Big Data •  Programmi×MongoDB = Grandi applicazioni Big Data
  • 60.
  • 62. High Volume Data Feeds •  More machine forms, sensors & data •  Variably structured Machine Generated Data •  High frequency trading •  Daily closing priceSecurities Data •  Multiple data sources •  Each changes their format consistently •  Student Scores, ISP logs Social Media / General Public
  • 63. Operational Intelligence •  Large volume of users •  Very strict latency requirements •  Sentiment Analysis Ad Targeting •  Expose data to millions of customers •  Reports on large volumes of data •  Reports that update in real time Real time dashboards •  Join the conversation •  Catered Games •  Customized Surveys Social Media Monitoring
  • 64. Metadata •  Diverse product portfolio •  Complex querying and filtering •  Multi-faceted product attributes Product Catalogue •  Data mining •  Call records •  Insurance Claims Data analysis •  Retina Scans •  FingerprintsBiometric
  • 65. Content Management •  Comments and user generated content •  Personalization of content and layoutNews Site •  Generate layout on the fly •  No need to cache static pages Multi-device rendering •  Store large objects •  Simpler modeling of metadataSharing
  • 67. Grazie!!! Senior Solution Architect, MongoDB Inc. massimo@mongodb.com Massimo Brignoli @massimobrignoli