set based thinking

28
Template designed by Set Based Thinking Davide Mauri [email protected] www.davidemauri.it

Upload: davide-mauri

Post on 27-Jun-2015

194 views

Category:

Technology


3 download

DESCRIPTION

Dai problemi più semplici a quelli più complessi, è la logica con cui si risolve il problema che fa la differenza. E, nel risolvere un problema, non sarebbe bello poter sempicemente dire alla macchina "cosa" si vuole ottenere, lasciando risolvere il problema di "come" farlo, alla macchina stessa? In questo modo essa potrebbe anche tenere conto delle condizioni di contorno, in modo tale di produrre il risultato nel modo migliore possibile. In questa sessione vedremo come poter risolvere problemi comuni utilizzando un approcio "Set-Based" ("pensare per insiemi"), grazie al quale sarà possibile migliorare le performance di oltre il 100%!

TRANSCRIPT

Page 1: Set Based Thinking

Template designed by

Set Based Thinking

Davide [email protected] www.davidemauri.it

Page 2: Set Based Thinking

brought to you by

Page 3: Set Based Thinking

Works with SQL Server from 6.5, on BI from 2003

Specialized in Data Solution Architecture, Database Design, Performance Tuning, BI

Microsoft SQL Server MVP

President of UGISS (Italian SQL Server UG)

Mentor @ SolidQ

Regular Speaker @ SQL Server events

Consulting & Training

Davide Mauri

3

Page 4: Set Based Thinking

Iniziamo con un problema apparentemente sempliceE vediamo dove ci porta

Dobbiamo sviluppare una sistema di online-ticketing per la prenotazione di posti a sedere in teatri / stadi / cinema, ecc. ecc.

Problema

Page 5: Set Based Thinking

Supponiamo di avere questa situazione

Arriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel mio sistema?

Cinema, teatri e magazzini

Page 6: Set Based Thinking

Cinema, teatri e magazzini – Row by Row

3 4 5 6 7 9A. Imposta il «Contatore Posti Liberi» (CPL) a 1B.Memorizza il valore ordinale (n) del primo posto

libero trovato (PPL)C.Se il successivo posto libero ha ordinale n+1

allora aumenta il contatore CPLD.Altrimenti memorizza PPL e CPL da qualche parteE. Riparti da A

1 2 5 1

Page 7: Set Based Thinking

Dem

o Prova su strada

Page 8: Set Based Thinking

E’ il migliore?…oppure solamente il primo che ci è venuto in mente?

E’ veramente cosi semplice come ci sembra?…alla fine il codice è molto meno semplice di quanto ipotizzato!

E’ scalabile?Se lo vediamo allo stadio di Maracanà (95.000 posti a sedere) cosa succede?

Cinema, teatri e magazzini – Row by Row

Page 9: Set Based Thinking

Dem

o L’alternativa

Page 10: Set Based Thinking

Le performance migliorano di un ordine di grandezza!E di più di uno per quato riguarda gli I/O!!!!

Dobbiamo cambiare il modo di pensare alla soluzioneNon dobbiamo ragionare in termini di ciò che possiamo fare scrivendo il codice T-SQL

Dobbiamo pensare a come trovare la soluzione migliore da un punto di vista puramente “logico”

Considerazioni

Think in Sets!

Page 11: Set Based Thinking

Dobbiamo pensare all’intero insieme dei dati

In questo modo possiamo trovare una soluzione logica esprimibile in modo unicamente dichiarativoE non procedurale!

• Il codice è solamente un “tool”. E’ il mezzo, non il fine!

In questo modo permettiamo all’optimizer di fare il solo lavoro, altrimenti ci sostiuiamo a lui

Thinking in Sets

Page 12: Set Based Thinking

“Houston abbiamo un problema”Siamo abituati a pensare in modo procedurale (visto che la maggior parte dei linguaggi di programmazione lo è)

Dobbiamo quindi disimparare a pensare in questo modo ed imparare a pensare set-based!

Thinking in Sets

Page 13: Set Based Thinking

All’inizio sarà difficile, ma non preoccupateviAll’inizio ogni cosa è difficile!

Thinking in Sets

Un pò meno:Facile: Ma è chiaro chi dei due vincerà in unacompetizione!

Tutto quello di cuiabbiamo bisognoè esercizio!

Page 14: Set Based Thinking

Ora vedremo una serie di problemi reali, incontrati durante differenti consulenzeOpportunamente rimodellati e generalizzati

E vedremo come risolverli usando un approccio “Set-Based”, anche quando non sembra possibile che esista una soluzione in tal sensoVedrete che per la fine della sessione inizierete a “vedere la luce”

• Magari con un pò di mal di testa

Thinking in Sets

Page 15: Set Based Thinking

Iniz

iam

o!

Page 16: Set Based Thinking

Dati valore del prestito, inizio e fine dello stesso, frequenza di pagamento e interessi, generare tutte le righe corrispondenti a tutte le date di scadenza delle rate

Rate, Mutui & Prestiti

Loan Value# Rates

Payment Frequency

% Interest

€ 10.000,00 12 1 5,00% € 20.000,00 12 6 6,00% € 30.000,00 12 6 5,50%

Rate Date

€ 875,00 January-10

€ 875,00 February-10

€ 875,00 March-10

€ 875,00 April-19

€ 875,00 May-10

€ 875,00 June-10

€ 875,00 July-10

€ 875,00 August-10

€ 875,00 September-10

€ 875,00 October-10

€ 875,00 November-10

€ 875,00 December-10

Page 17: Set Based Thinking

Dem

o

Calcolo delle rate

Page 18: Set Based Thinking

Data una lista di macchine, restituire l’ultimo stato notificato nel log di lavoro

Raggruppamenti e valori correlati

ControllerABC

Controller StatusTimeSta

mpA StandBy 1001B StandBy 1001C StandBy 1003D Working 1004A Working 1004B StandBy 1006D StandBy 1009D Working 1010D Working 1011

Page 19: Set Based Thinking

Dem

o

Raggruppamenti e

valori correlati

Page 20: Set Based Thinking

Data una tabella contenente tutte le transazioni giornarliere, estrarre per ogni azione, per ogni ora, i valori di apertura, chiusura, ecc.

Azioni

SymbolID TransactionDateTime Price Volume

12008-01-01

09:15:21.000 75.800 2589

12008-01-01

09:25:44.000 68.200 4386

12008-01-01

09:29:31.000 74.300 2837

12008-01-01

09:34:42.000 68.900 2937

12008-01-01

09:39:13.000 72.300 4513

12008-01-01

09:43:35.000 67.300 838

12008-01-01

09:51:57.000 73.800 1380

12008-01-01

09:56:42.000 68.700 4190

tran_hourfrom_datetime to_datetime symbol_id high low volume open close

92008-01-01 09:15:21.000

2008-01-01 09:56:42.000 1 75.800 67.300 23670 75.800 68.700

Page 21: Set Based Thinking

Dem

o

Borsa & Azioni

Page 22: Set Based Thinking

Supponiamo di avere questa situazione

Arriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel mio sistema?

Cinema, teatri e magazzini

Page 23: Set Based Thinking

Cinema, teatri e magazzini – Set Based

A.Se SQL Server potesse vedere l’immagine qui soprapotrebbe facilmente identificare dei gruppi

E quindi potremmo usare un semplice «Group By»B.Dobbiamo quindi trovare il modo di «convertire» questa

caratteristica «visuale» in un qualcosa di utilizzabile da SQL Server

Più che convertire...far emergere

Page 24: Set Based Thinking

Cinema, teatri e magazzini – Set Based

A.Enumeriamo tutti i postiB.Enumeriamo solo i posti liberiC.Facciamo una differenzaD.Ed ora possiamo fare un bel GROUP BY!

1 2 3 4 5 6 7 8 910…

1 2 3 4 5 6 7 …2 2 2 2 2 3 3

Page 25: Set Based Thinking

Dem

o

Cinema, teatri e

magazzini

Page 26: Set Based Thinking

Data una lista di macchine, raggruppare per range tutti gli stati riportati

Raggruppamenti e Range

Controller StatusTimeStam

pA StandBy 1001B StandBy 1002B StandBy 1003B StandBy 1004A Working 1005A Working 1006A Working 1007B Working 1008B Working 1009A StandBy 1010A StandBy 1011B StandBy 1012

Controller Status From To

AStandB

y 1001 1001

BStandB

y 1002 1004

AWorkin

g 1005 1007

BWorkin

g 1008 1009

AStandB

y 1010 1011

BStandB

y 1012 1012

Page 27: Set Based Thinking

Dem

o

Raggruppamenti e

range

Page 28: Set Based Thinking

Grazie a tutti per la partecipazione

Riceverete il link per il download a slide e demo via email nei prossimi giorni

Per contattarmi

[email protected]

Grazie