SlideShare a Scribd company logo

Dynamic Schema e Schemaless Tables

Come gestire un sistema nel quale lo schema dei dati non è definibile a priori? Come poter cercare entità i cui dati stanno su più righe? In questa sessione andremo ad affrontare tutti questi problemi, storicamente tra i più complessi per chi si trova a doverli gestire eppure molto comuni e particolarmente delicati per quanto riguarda le performance.

1 of 31
Download to read offline
Dynamic Schema e Schemaless Tables
Grazie a
           Sponsor
Davide Mauri
Microsoft SQL Server MVP
Works with SQL Server from 6.5, on BI from 2003
Specialized in Data Solution Architecture, Database Design, Performance Tuning, BI
President of UGISS (Italian SQL Server UG)
Regular Speaker @ SQL Server events
Consulting & Training
Mentor @ SolidQ
•   Italian Subsidiary

dmauri@solidq.com
Twitter: @mauridb
http://www.davidemauri.it
Agenda
• Schema, Schemaless & Implicit Schemas
• Possibili soluzioni
• Conclusioni
Schema
• Definizione «a priori» della struttura dei
  dati
• Permette l’inserimento dei dati solo se
  compatibili con lo schema definito
• Es: Tabella in un RDBMS, XML Schema,
  Classe, Struttura
Schemaless(?)
• Nessuna definizione dello schema. Dati
  non strutturati
  – File di testo, file binari (senza metadati)


• In poche parole un caos.

Recommended

Marco visconti Architetto, Le strategie di sostenibilità ispirano l’opera di ...
Marco visconti Architetto, Le strategie di sostenibilità ispirano l’opera di ...Marco visconti Architetto, Le strategie di sostenibilità ispirano l’opera di ...
Marco visconti Architetto, Le strategie di sostenibilità ispirano l’opera di ...infoprogetto
 
Web Design Planning Worksheet
Web Design Planning WorksheetWeb Design Planning Worksheet
Web Design Planning Worksheetbutest
 
RDBMS: pregi e difetti
RDBMS: pregi e difettiRDBMS: pregi e difetti
RDBMS: pregi e difettiGianluca Hotz
 
SQL Server Worst Practices
SQL Server Worst PracticesSQL Server Worst Practices
SQL Server Worst PracticesGianluca Sartori
 
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013
No sql introduzione. Corso Sistemi Informativi Politecnico di Milano 12-11-2013Myti S.r.l.
 

More Related Content

Similar to Dynamic Schema e Schemaless Tables

PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerAlessandro Alpi
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL DatabaseEmanuele Zanchettin
 
Best Practices on SQL Server
Best Practices on SQL ServerBest Practices on SQL Server
Best Practices on SQL ServerGianluca Hotz
 
Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015Codemotion
 
JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech LabUgo Landini
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databasesGianluca Hotz
 
Power B: Cleaning data
Power B: Cleaning dataPower B: Cleaning data
Power B: Cleaning dataMarco Pozzan
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdfMarco Pozzan
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Emanuele Zanchettin
 
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Gianluca Hotz
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL DatabaseEmanuele Zanchettin
 
Crogioli, alambicchi e beute: dove mettere i vostri dati.
Crogioli, alambicchi e beute: dove mettere i vostri dati.Crogioli, alambicchi e beute: dove mettere i vostri dati.
Crogioli, alambicchi e beute: dove mettere i vostri dati.PyCon Italia
 
Crogioli, alambicchi e beute, dove mettere i
Crogioli, alambicchi e beute, dove mettere i Crogioli, alambicchi e beute, dove mettere i
Crogioli, alambicchi e beute, dove mettere i Simone Deponti
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossaGian Maria Ricci
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)DotNetMarche
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017Gianluca Hotz
 

Similar to Dynamic Schema e Schemaless Tables (20)

PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL Server
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Best Practices on SQL Server
Best Practices on SQL ServerBest Practices on SQL Server
Best Practices on SQL Server
 
Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015
 
JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech Lab
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
Data grid
Data gridData grid
Data grid
 
Azure sql database
Azure sql databaseAzure sql database
Azure sql database
 
Power B: Cleaning data
Power B: Cleaning dataPower B: Cleaning data
Power B: Cleaning data
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdf
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2
 
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Crogioli, alambicchi e beute: dove mettere i vostri dati.
Crogioli, alambicchi e beute: dove mettere i vostri dati.Crogioli, alambicchi e beute: dove mettere i vostri dati.
Crogioli, alambicchi e beute: dove mettere i vostri dati.
 
Crogioli, alambicchi e beute, dove mettere i
Crogioli, alambicchi e beute, dove mettere i Crogioli, alambicchi e beute, dove mettere i
Crogioli, alambicchi e beute, dove mettere i
 
Presentazione bd2
Presentazione bd2Presentazione bd2
Presentazione bd2
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossa
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017
 

More from Davide Mauri

Azure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstartAzure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstartDavide Mauri
 
Agile Data Warehousing
Agile Data WarehousingAgile Data Warehousing
Agile Data WarehousingDavide Mauri
 
Dapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDavide Mauri
 
When indexes are not enough
When indexes are not enoughWhen indexes are not enough
When indexes are not enoughDavide Mauri
 
Building a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with AzureBuilding a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with AzureDavide Mauri
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveDavide Mauri
 
Azure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSONAzure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSONDavide Mauri
 
SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2Davide Mauri
 
SQL Server 2016 Temporal Tables
SQL Server 2016 Temporal TablesSQL Server 2016 Temporal Tables
SQL Server 2016 Temporal TablesDavide Mauri
 
SQL Server 2016 What's New For Developers
SQL Server 2016  What's New For DevelopersSQL Server 2016  What's New For Developers
SQL Server 2016 What's New For DevelopersDavide Mauri
 
Azure Stream Analytics
Azure Stream AnalyticsAzure Stream Analytics
Azure Stream AnalyticsDavide Mauri
 
Azure Machine Learning
Azure Machine LearningAzure Machine Learning
Azure Machine LearningDavide Mauri
 
Dashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BIDashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BIDavide Mauri
 
Azure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applicationsAzure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applicationsDavide Mauri
 
Event Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsEvent Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsDavide Mauri
 
SQL Server 2016 JSON
SQL Server 2016 JSONSQL Server 2016 JSON
SQL Server 2016 JSONDavide Mauri
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveDavide Mauri
 
Real Time Power BI
Real Time Power BIReal Time Power BI
Real Time Power BIDavide Mauri
 
AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)Davide Mauri
 
Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Davide Mauri
 

More from Davide Mauri (20)

Azure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstartAzure serverless Full-Stack kickstart
Azure serverless Full-Stack kickstart
 
Agile Data Warehousing
Agile Data WarehousingAgile Data Warehousing
Agile Data Warehousing
 
Dapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDapper: the microORM that will change your life
Dapper: the microORM that will change your life
 
When indexes are not enough
When indexes are not enoughWhen indexes are not enough
When indexes are not enough
 
Building a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with AzureBuilding a Real-Time IoT monitoring application with Azure
Building a Real-Time IoT monitoring application with Azure
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep Dive
 
Azure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSONAzure SQL & SQL Server 2016 JSON
Azure SQL & SQL Server 2016 JSON
 
SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2SQL Server & SQL Azure Temporal Tables - V2
SQL Server & SQL Azure Temporal Tables - V2
 
SQL Server 2016 Temporal Tables
SQL Server 2016 Temporal TablesSQL Server 2016 Temporal Tables
SQL Server 2016 Temporal Tables
 
SQL Server 2016 What's New For Developers
SQL Server 2016  What's New For DevelopersSQL Server 2016  What's New For Developers
SQL Server 2016 What's New For Developers
 
Azure Stream Analytics
Azure Stream AnalyticsAzure Stream Analytics
Azure Stream Analytics
 
Azure Machine Learning
Azure Machine LearningAzure Machine Learning
Azure Machine Learning
 
Dashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BIDashboarding with Microsoft: Datazen & Power BI
Dashboarding with Microsoft: Datazen & Power BI
 
Azure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applicationsAzure ML: from basic to integration with custom applications
Azure ML: from basic to integration with custom applications
 
Event Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsEvent Hub & Azure Stream Analytics
Event Hub & Azure Stream Analytics
 
SQL Server 2016 JSON
SQL Server 2016 JSONSQL Server 2016 JSON
SQL Server 2016 JSON
 
SSIS Monitoring Deep Dive
SSIS Monitoring Deep DiveSSIS Monitoring Deep Dive
SSIS Monitoring Deep Dive
 
Real Time Power BI
Real Time Power BIReal Time Power BI
Real Time Power BI
 
AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)AzureML - Creating and Using Machine Learning Solutions (Italian)
AzureML - Creating and Using Machine Learning Solutions (Italian)
 
Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)
 

Dynamic Schema e Schemaless Tables

  • 2. Grazie a Sponsor
  • 3. Davide Mauri Microsoft SQL Server MVP Works with SQL Server from 6.5, on BI from 2003 Specialized in Data Solution Architecture, Database Design, Performance Tuning, BI President of UGISS (Italian SQL Server UG) Regular Speaker @ SQL Server events Consulting & Training Mentor @ SolidQ • Italian Subsidiary dmauri@solidq.com Twitter: @mauridb http://www.davidemauri.it
  • 4. Agenda • Schema, Schemaless & Implicit Schemas • Possibili soluzioni • Conclusioni
  • 5. Schema • Definizione «a priori» della struttura dei dati • Permette l’inserimento dei dati solo se compatibili con lo schema definito • Es: Tabella in un RDBMS, XML Schema, Classe, Struttura
  • 6. Schemaless(?) • Nessuna definizione dello schema. Dati non strutturati – File di testo, file binari (senza metadati) • In poche parole un caos.
  • 7. Implict Schema • In realtà c’è sempre uno schema implicito – Altrimenti non si saprebbe come trattare i dati
  • 8. Implicit Schema «Ogni valore al di fuori dello schema implicito non può essere gestito in modo corretto» (Schemaless data structures, Martin Fowler)
  • 9. Pro • Flessibilità – Immediatezza – Estendibilità – Facilità
  • 10. Contro • Le informazioni sullo schema sono nascoste – Sono sparse nel codice • E’ molto difficile governare la confusione che si può venire a creare – Es: campi diversi che contengono lo stesso dato • RagioneSociale vs Ragione_Sociale
  • 11. Contro • Molto molto difficile definire dei vincoli di integrità dai dati – L’integrità dei dati è un valore da preservare! – Gli schemi XML non sono nati a caso  • Le performance in fase di inserimento e ricerca possono essere problematiche
  • 12. Cosa dice il saggio? «Schemaless => implicit schema = bad. Prefer an explicit schema» (Schemaless data structures, Martin Fowler)
  • 13. E se serve ugualmente? • Ma se effettivamente sono nel corretto use-case per l’uso di un implicit schema? • L’unica soluzione è un database documentale o un key-value store?
  • 14. Schemaless & RBMS • Sono agli antipodi • Eppure è una richiesta molto frequente – Es: CRM, eCommerce, ecc. • Non stiamo parlando di sola persistenza!
  • 15. Soluzioni con un RDBMS • Colonne «Custom» – Custom1, Custom2 • In-Table Data Structures – Colonne contenenti XML, JSON • Entity-Attribute-Value Models
  • 16. Colonne «Custom» • Fino a SQL Server 2008 un problema • Da SQL Server 2008 le Sparse Columns vengono in aiuto – La modifica dello schema deve essere ancora fatta tramite ALTER TABLE
  • 17. Colonne «Custom» • Sparse Columns – Sono colonne a tutti gli effetti – Opzionalmente restituite come XML • «Column Set» column – Non occupano spazio se non usate  • Ma ne occupano un po’ di più quando usate 
  • 18. Dynamic Schema & Sparse Columns DEMO
  • 19. In-Table Data Structures • Supporto completo per XML – XPath / XQuery – XML Index • Performance buone – Ma non ottimali (rispetto all’equivalente relazionale) – Notevole consumo di spazio
  • 20. In-Table Data Structures • Sarebbe bello avere la possibilità di «promuovere» degli elementi XML in automatico – Soluzione: Trigger a/o DAL con SP
  • 21. In-Table Data Structures • Supporto a JSON assente nativamente, volendo disponibile tramite SQLCLR – Perfomance non ottimale nella ricerca • Non è possibile indicizzare nulla…
  • 22. Dynamic Schema & XML DEMO
  • 23. Entity-Attribute-Values • Tecnica molto utilizzata – Ad esempio in Wordpress • Funziona su qualisiasi RDBMS – Non richiede funzionalità «speciali» • Molto discussa e discutibile – Ma fino a SQL 2005 nessuna vera alternativa
  • 24. Entity-Attribute-Values • Le query richiedono l’implementazione di un operatore non supportato dagli RDMBS – «Relational Division» – E’ documentato e ben spiegato nella teoria • Diventa quindi molto facile da implementare 
  • 25. Relational Division Dividend Divisor Result Remainder
  • 26. Relational Division • L’algebra relazionale ci dice che si implementa cosi: – Generare tutte le coppie di valori – Rimuovere tutte le coppie GIA esistenti • Cosi che abbiamo tutte le non-risposte – Rimuvere tutte le non-risposte 26
  • 27. Relational Division • Il bello degli RDBMS è che possiamo prendere la soluzione e scriverla tale e quale in SQL  • Applicando opportune semplificazioni si ottengono anche delle performance molto buone
  • 28. Dynamic Schema & EAV DEMO
  • 29. Conclusioni • Si può fare!  – Performance più che buone – Bisogna scegliere la soluzione che si adatta meglio al nostro use-case • Ricerca di attributi? • Ricerca di attributi & valori? • Performance read, write, read/write?
  • 30. Conclusioni • Non abusatene! • Ricordate sempre il saggio  – Se possibile usate lo schema, nel medio e lungo termine è la soluzione che da più benefici
  • 31. Q&A Tutto il nateriale di questa sessione su http://www.communitydays.it/ #CDays13

Editor's Notes

  1. Inserite l’eventuale vostro logo in basso a destra
  2. Slide da mostrare prima di iniziare la sessione – non rimuovere!
  3. http://martinfowler.com/articles/schemaless/
  4. http://martinfowler.com/articles/schemaless/
  5. Ultima slide, obbligatoria