Tecniche di programmazione
description
Transcript of Tecniche di programmazione
Tecniche di programmazione
21 April 2023 - slide 2Le nuove tecnologie Software
Linguaggi per basi di dati Un altro contributo all’efficacia: disponibilità di vari linguaggi e interfacce
linguaggi testuali interattivi (SQL) comandi (SQL) immersi in un linguaggio ospite (Pascal, Java, C ...) comandi (SQL) immersi in un linguaggio ad hoc, con anche altre
funzionalità (p.es. per grafici o stampe strutturate) con interfacce amichevoli (senza linguaggio testuale)
21 April 2023 - slide 3Le nuove tecnologie Software
SQL, un linguaggio interattivo "Trovare i corsi tenuti in aule a piano terra"
Nome PianoEdificio
OMIDS1 Terra
PincherleG Primo
OMIN3 Terra
Aule
RossiBasi di dati DS3
BruniReti N3
NeriSistemi N3
BruniControlli G
Corsi
AulaDocenteCorso
21 April 2023 - slide 4Le nuove tecnologie Software
SQL, un linguaggio interattivo
SELECT Corso, Aula, PianoFROM Aule, CorsiWHERE Nome = AulaAND Piano = "Terra"
Corso Aula
Reti N3
Sistemi N3
Piano
Terra
Terra
21 April 2023 - slide 5Le nuove tecnologie Software
TECNICHE DI PROGRAMMAZIONE
Tecniche di programmazione di tipo EMBEDDED Statico Dinamico
Tecniche di programmazione in Client-Server e multi tier via API
API proprietarie (dbLib,… API standard (ODBC, JDBC, OLEdb, DAO, ADO, ADO.NET,…)
21 April 2023 - slide 6Le nuove tecnologie Software
Embedded SQL: staticoFonte Codice
Linguaggio + SQL
Precompiler
Codice sorgente
‘Stripped’
Data Base Requeste
Module
Compiler Bind
DBMS
Library
Ooject
Code
Linker
EXE
Application
Plan
App Plan
Data Base
21 April 2023 - slide 7Le nuove tecnologie Software
Emberdded SQl: statico e dinamico
SQL Statement
Parse
Validazione
Ottimizzazione
Genera app. plan
Esecuzione
Forma binaria
SQL STATICO
Precomp.
Bind
Esecuzione
SQL DINAMICO
Execute Imm
Prepare
Esecuzione
21 April 2023 - slide 8Le nuove tecnologie Software
SQL immerso in linguaggio ospitewrite('nome della citta''?'); readln(citta); EXEC SQL DECLARE P CURSOR FOR SELECT NOME, REDDITO FROM PERSONE WHERE CITTA = :citta ;EXEC SQL OPEN P ; EXEC SQL FETCH P INTO :nome, :reddito ; while SQLCODE = 0 do begin write('nome della persona:', nome, 'aumento?'); readln(aumento); EXEC SQL UPDATE PERSONE
SET REDDITO = REDDITO + :aumento WHERE CURRENT OF P EXEC SQL FETCH P INTO :nome, :reddito end;EXEC SQL CLOSE CURSOR P
21 April 2023 - slide 9Le nuove tecnologie Software
SQL in linguaggio ad hoc (Oracle PL/SQL)
declare Stip number;begin select Stipendio into Stip from Impiegato where Matricola = '575488' for update of Stipendio; if Stip > 30 then update Impiegato set Stipendio = Stipendio * 1.1
where Matricola = '575488'; else update Impiegato set Stipendio = Stipendio * 1.15
where Matricola = '575488'; end if; commit; exception when no_data_found then insert into Errori values('Matricola inesistente',sysdate); end;
21 April 2023 - slide 10Le nuove tecnologie Software
Interazione non testuale (Access)
21 April 2023 - slide 11Le nuove tecnologie Software
Suggerimenti programmazione su motore
Uso dei COST OPTIMIZER per il motore: risolve il problema dell’indicizzazione.Usare lo SHOW QUERY EXECUTION PLAN che indica come sono eseguite fisicamente le query.Nelle select pesano molto le clausole IN e OR e le LIKE (tipo ‘%AB’) piuttosto che (‘AB%’).Pesano poco le clausole = e BETWEEN.Non inserire dialogo con l’utente in processi transazionali MAI. Se serve almeno con timer.Usare uno snapshot e poi far partire il transazionale oppure utilizzare data set disconnessiAttenzione all’ordine delle INSERT (deadlock).
21 April 2023 - slide 12Le nuove tecnologie Software
Deadlock
Processo A Begin transaction Insert tblA … (ok) Select
Insert tblB …(wait) Commit
Processo B Begin transaction
Insert tblB … (ok) Select
Insert tblA … (wait) Commit
21 April 2023 - slide 13Le nuove tecnologie Software
Tempi indicativi di risposta applicazioni
Per il caso di in line transactions: 5 sec max (medio 2 sec)Per il caso di uso normale 30 sec max (medio 10 sec)Per il caso di record scan: 1-2 min max.