+ All Categories
Home > Technology > Dynamic Schema e Schemaless Tables

Dynamic Schema e Schemaless Tables

Date post: 27-Jun-2015
Category:
Upload: davide-mauri
View: 420 times
Download: 2 times
Share this document with a friend
Description:
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.
Popular Tags:
31
SQL01 - Dynamic Schema e Schemaless Tables. Si puo' fare! #CDays13 – 27 e 28 febbraio 2013 Davide Mauri SQL Server MVP Founder & Mentor - SolidQ [email protected] Twitter: @mauridb http://www.davidemauri.it
Transcript
Page 1: Dynamic Schema e Schemaless Tables

SQL01 - Dynamic Schema e Schemaless Tables. Si puo' fare!

#CDays13 – 27 e 28 febbraio 2013

Davide Mauri

SQL Server MVPFounder & Mentor - SolidQ

[email protected]: @mauridbhttp://www.davidemauri.it

Page 3: Dynamic Schema e Schemaless Tables

Davide MauriMicrosoft SQL Server MVPWorks with SQL Server from 6.5, on BI from 2003Specialized in Data Solution Architecture, Database Design, Performance Tuning, BIPresident of UGISS (Italian SQL Server UG)Regular Speaker @ SQL Server eventsConsulting & TrainingMentor @ SolidQ• Italian Subsidiary

[email protected] Twitter: @mauridbhttp://www.davidemauri.it

Page 4: Dynamic Schema e Schemaless Tables

Agenda• Schema, Schemaless & Implicit

Schemas• Possibili soluzioni• Conclusioni

Page 5: Dynamic Schema e Schemaless Tables

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

Page 6: Dynamic Schema e Schemaless Tables

Schemaless(?)• Nessuna definizione dello schema.

Dati non strutturati– File di testo, file binari (senza metadati)

• In poche parole un caos.

Page 7: Dynamic Schema e Schemaless Tables

Implict Schema• In realtà c’è sempre uno schema

implicito– Altrimenti non si saprebbe come trattare

i dati

Page 8: Dynamic Schema e Schemaless Tables

Implicit Schema

«Ogni valore al di fuori dello schema implicito non può essere gestito in modo corretto»

(Schemaless data structures, Martin Fowler)

Page 9: Dynamic Schema e Schemaless Tables

Pro• Flessibilità– Immediatezza– Estendibilità– Facilità

Page 10: Dynamic Schema e Schemaless Tables

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

Page 11: Dynamic Schema e Schemaless Tables

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

Page 12: Dynamic Schema e Schemaless Tables

Cosa dice il saggio?

«Schemaless => implicit schema = bad.Prefer an explicit schema»

(Schemaless data structures, Martin Fowler)

Page 13: Dynamic Schema e Schemaless Tables

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?

Page 14: Dynamic Schema e Schemaless Tables

Schemaless & RBMS• Sono agli antipodi

• Eppure è una richiesta molto frequente– Es: CRM, eCommerce, ecc.

• Non stiamo parlando di sola persistenza!

Page 15: Dynamic Schema e Schemaless Tables

Soluzioni con un RDBMS• Colonne «Custom»– Custom1, Custom2

• In-Table Data Structures– Colonne contenenti XML, JSON

• Entity-Attribute-Value Models

Page 16: Dynamic Schema e Schemaless Tables

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

Page 17: Dynamic Schema e Schemaless Tables

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

Page 18: Dynamic Schema e Schemaless Tables

DEMODynamic Schema & Sparse Columns

Page 19: Dynamic Schema e Schemaless Tables

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

Page 20: Dynamic Schema e Schemaless Tables

In-Table Data Structures• Sarebbe bello avere la possibilità di

«promuovere» degli elementi XML in automatico– Soluzione: Trigger a/o DAL con SP

Page 21: Dynamic Schema e Schemaless Tables

In-Table Data Structures• Supporto a JSON assente

nativamente, volendo disponibile tramite SQLCLR– Perfomance non ottimale nella ricerca• Non è possibile indicizzare nulla…

Page 22: Dynamic Schema e Schemaless Tables

DEMODynamic Schema & XML

Page 23: Dynamic Schema e Schemaless Tables

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

Page 24: Dynamic Schema e Schemaless Tables

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

Page 25: Dynamic Schema e Schemaless Tables

Relational Division

Dividend

Divisor Result

Remainder

𝛼

𝛽

Page 26: Dynamic Schema e Schemaless Tables

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

Page 27: Dynamic Schema e Schemaless Tables

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

Page 28: Dynamic Schema e Schemaless Tables

DEMODynamic Schema & EAV

Page 29: Dynamic Schema e Schemaless Tables

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?

Page 30: Dynamic Schema e Schemaless Tables

Conclusioni• Non abusatene!

• Ricordate sempre il saggio – Se possibile usate lo schema, nel medio

e lungo termine è la soluzione che da più benefici

Page 31: Dynamic Schema e Schemaless Tables

Q&ATutto il nateriale di questa sessione suhttp://www.communitydays.it/

#CDays13


Recommended