Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.

Slides:



Advertisements
Verwante presentaties
De gemiddelde leerling
Advertisements

SINT LUKAS HOGESCHOOL BRUSSEL
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
ZIEHIER 36 REDENEN WAAROM BIER
November 2013 Opinieonderzoek Vlaanderen – oktober 2013 Opiniepeiling Vlaanderen uitgevoerd op het iVOXpanel.
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Personalisatie van de Archis website Naam: Sing Hsu Student nr: Datum: 24 Juni 2004.
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
Meerdere tabellen: Relaties en Joins
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Ronde (Sport & Spel) Quiz Night !
Natuurlijke Werkloosheid en de Phillipscurve
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Het selecteren van data uit meerdere gekoppelde tabellen
Van Nul naar Drie Normaliseren.
Databases.
Start.
VTB Technasium Vakcollege
Leiden University. The university to discover. ICLON, Interfacultair Centrum voor Lerarenopleiding, Onderwijsontwikkeling en Nascholing Denkgereedschap.
Nooit meer onnodig groen? Luuk Misdom, IT&T
BZ voor de Klas 3 juni 2010.
Hoofdstuk 6: Controle structuren
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
1 introductie 3'46” …………… normaal hart hond 1'41” ……..
Oefeningen F-toetsen ANOVA.
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Normalisatie Relationeel databaseontwerp:
TUDelft Knowledge Based Systems Group Zuidplantsoen BZ Delft, The Netherlands Caspar Treijtel Multi-agent Stratego.
Richard J. Boucherie – Het antwoord of de vraag10 mei Het antwoord of de vraag.
Optuigen van datastructuren
User management voor ondernemingen en organisaties
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
Workshop PHP Een productencatalogus Met database.
Databases.
1 Controleplan 2005 Raadgevend comité Hotel President – donderdag 21 april 2005.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Ontwikkeld door CWB3. Opbouw Presentatie 1.Wat is GeoSport? 2.Ontwerp 1.Gebruikte ontwerpmethodieken 2.Ervaring 3.Implementatie 1.Gebruikte technologieën.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
Fractale en Wavelet Beeldcompressie
De financiële functie: Integrale bedrijfsanalyse©
aangename ont - moeting
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
ZijActief Koningslust
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
1 XSLT processing & control Datamodellering 2006.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 2 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
EERDER….. Tabellen rij (record, tuple, occurence) kolom (attribuut, veld) tabel (relatie) tabelstructuur : patient(PAT#,PNAAM,LEEFTIJD,GESLACHT,ARTS)
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
– Software development fundamentals
LauwersCollege Buitenpost Informatica
Moving objects in a geo-DBMS
Software Development fundamentals
SQL Les February 2019.
SQL Les 7 24 February 2019.
SQL Les 6 14 April 2019.
SQL Les 9 12 May 2019.
– Software development fundamentals
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling

Persistentie Org. term: “persistence”, to pesist  te blijven bestaan. Een applicatie kan ineens crashen (bugs, stroom uitval, enz). Je wil je data redden! Persistentie  onderdeel van je applicatie die data op een permanente medium opslaat. Files Database 2

Hoe belangrijk ? Erg belangrijk  in een bedrijfsapplicatie zijn data vaak erg waardevol. Omdat je app kan op ieder moment crashen, in de praktijk wordt data vaak na iedere “save/submit” van de klant ook direct in de db opgeslagen. 3

Uitdaging 4 Betrouwbaar geen data verlies of stuk backup, rollback Prestatie (performance)  snel je data te kunnen querien / updaten Concurrentie  apps met meerdere cliënten zijn nu gewoon.

Concurrentie  ACID transacties 5 “Atomic”  een transactie wordt nooit half uitgevoerd (volledig of helemaal niet). “Consistent”  een transactie die de DB’s constraints zou breken wordt geweigerd. “ge-Isoleerd”  tussen toestanden van een transactie zijn niet door andere transacties zichtbaar. “Durabel”  als een transactie voltooit, effect op DB is persistent.

File vs DB 6 File goedkoop minder boilerplate je zou rollback, query, concurrentie, enz zelf moeten programmeren (voor zover nodig) geschikt voor kleine apps DB  andersom

Relationeel DB 7 Meest gebruikte DB  relationeel  bewezen technologie. In wiskunde, een relatie R : A×B×C is een verzameling van tupels uit A×B×C zoals: { (a 1,b 1,c 1 ), (a 2,b 2,c 2 ) } Een tabel is een relatie: ABC a1a1 b1b1 c1c1 a2a2 b2b2 c2c2

Typische architectuur 8 Presentatie (User Interface) laag Bedrijfslogica (Probleemdomein /PD ) laag Persistentie (Data Access Management / DAM) laag Persistentie (Data Access Management / DAM) laag DB Klant Product * bestelt OrderNrKlantIDNaamStaatTax BlackMD WilliamCA WilliamCA BerryDC BerryDC0.06 save, load, query

Impendance mismatch… 9 Je ontwerpt met UML, en implementeert in een OO taal. Echter, de meeste DB technologieën zijn relationeel. Data zijn in tabellen georganiseerd. Geen direct ondersteuning voor het opslaan van objecten. Oplossing ? Zelf de mapping implementeren ?  veel werk! Object-relationele DB OO DB Mapping frameworks

Entity Relationship (ER) Diagram 10 Klant ID {PK} Naam Leeftijd Klant ID {PK} Naam Leeftijd Product ID {PK} Naam Prijs Product ID {PK} Naam Prijs * bestelt IDNaamLeeftijd 10Bob6 11Patrick7 Klant IDNaamPrijs 1Appel10 2Peer15 Product KlantIDProdID Bestelling

ERD en klasse diagram 11 Klant Naam Leeftijd Klant Naam Leeftijd Product Naam Prijs Product Naam Prijs * bestelt Klant ID {PK} Naam Leeftijd Klant ID {PK} Naam Leeftijd Product ID {PK} Naam Prijs Product ID {PK} Naam Prijs * bestelt Impliciet ID Navigatie Expliciet PK Geen concept van navigatie

ERD en klasse diagram 12 Auto Bouwjaar Auto Bouwjaar Product Naam Prijs Product Naam Prijs Auto ID {PK} Bouwjaar Auto ID {PK} Bouwjaar Product ID {PK} Naam Prijs Product ID {PK} Naam Prijs 0..1 is extensie van traditioneel ERD kent geen inheritence. Auto Naam = “Toyota” Prijs = 2000 € Bouwjaar = IDNaamPrijs 1Appel10 2Totoya2000 3Toyota5000 Product IDBouwjaar AutoIDProdID Auto_Product Auto

Nog meer vraagstukken… 13 Persoon Naam = “Bob” Leeftijd = 6 IDNaamLeeftijd 10Bob6 11Octo7 Persoon Naam = “Octo” Leeftijd = 7 Vrienden Persoon Hoe sla je een complexe object “Octo” op in tabellen ? Hoe haal je het terug? Navigatie door objecten vs relationele query. Hoe zit het met object encapsulatie? Hoe sla je een complexe object “Octo” op in tabellen ? Hoe haal je het terug? Navigatie door objecten vs relationele query. Hoe zit het met object encapsulatie?

Zelf doen… 14 Persoon Naam Persoon Naam heeft vrienden * Persoon Naam = “Octo” Vrienden Persoon PersoonDAO find(id) : Persoon insert(persoon) getVrienden(id) : Collection DB *

Zelf doen… 15 Persoon Naam = “Octo” Vrienden Persoon PersoonDAO find(id) : Student insert(persoon) getVrienden(id) : Collection DB find(id) { qry = “select * from PERSOON where ID = ” + id result = connection.executeQry(qry) return new Persoon(result.getString(“Naam”)) } find(id) { qry = “select * from PERSOON where ID = ” + id result = connection.executeQry(qry) return new Persoon(result.getString(“Naam”)) } geef een plat object terug! Navigatie nu indirect via deze.

Object-Relationele DB / ORDB 16 CREATE TYPE Klant UNDER Persoon ( lidnr INT ) CREATE TYPE Klant UNDER Persoon ( lidnr INT ) CREATE TYPE Persoon AS OBJECT ( Naam CHAR(20) Vrienden SET (REF Persoon) ) CREATE TYPE Persoon AS OBJECT ( Naam CHAR(20) Vrienden SET (REF Persoon) ) CREATE TABLE PERSOON OF TYPE Persoon INSERT INTO PERSOON VALUES (Klant (“Bob", 123, 10)) SELECT p.Vrienden FROM Persoon p WHERE p.Naam = “Bob

Object-Relationele DB / ORDB Relationele DB, uitgebreid met OO concepten: User Defined Type  class Inheritence REF  object ID Ingebouwde navigatie  auto.eigenaar.vrienden SET (van REFs)  to represent navigable OO one-to- many Zoals in SQL 1999 Producten: Oracle, PostgreSQL Niet native in bijvb. Java. Je zou je DAO nog steeds zelf moeten bouwen…maar minder ingewikkeld. 17

Java Persistence Architecture / JPA javax.jpa, implementatie: Apache OpenJPA Entity manager  gratis DAO Je moet nog een “mapping” specificeren… 18 EntityManager em = get … em.getTransaction().begin() em.find(Persoon.class, 20) em.persist(bob) em.getTransaction().commit() EntityManager em = get … em.getTransaction().begin() em.find(Persoon.class, 20) em.persist(bob) em.getTransaction().commit()

Object-Relationeel Mapping /ORM In welke tabel sla je objecten van klasse C op ? In welke kolommen sla je de attributen van je class private int private String private Collection class private int private String private Collection vrienden …. getId() { return id } getNaam() { return naam } getVrienden() { return vrienden } getId() { return id } getNaam() { return naam } getVrienden() { return vrienden ….)

ORM … Je moet ook nog een persistence descriptor maken. In een XML bestand, specificeer: Waar is je implementatie van EntityManager? Waar is de DB, hoe maak je verbinding met DB? Welke klassen neem je mee in de O/R mapping? Nog steeds gedoe, maar je hebt nu veel minder boiler plate… Vergelijkbaar technologie: ‘ORM framework’ zoals Hibernate. 20

OO DB Zoals DB4O Er is geen relationele mapping Objecten zijn ‘direct’opgeslagen. 21 Persoon Naam = “Octo” Vrienden Persoon IDNaamPrijs 1Appel10 2Peer15 IDNaamLeeftijd 10Bob6 11Patrick7

OO DB Code is schoner : OODB of RDB? Coding overhead is belangrijk, maar er zit nog meer … -  later. 22 db = Db4o.openFile(“MijnOODB”) db.get(new Persoon(0,”Bob”)) db.set(octo) List result = db.query( …. p.leeftijd >= 5) db.close() db = Db4o.openFile(“MijnOODB”) db.get(new Persoon(0,”Bob”)) db.set(octo) List result = db.query( …. p.leeftijd >= 5) db.close() native query in Java … goed of slecht ?

Terug: OODB of RDB ? Medische historie van een persoon  wat willen we zien? Adres, lijst van klachten, lijst van voorgeschreven medicijnen. lijst of tabel achtige informatie  makkelijk met een joint op RDB. Je wil een rijke structuur  OO, of ORDB 23 historie klacht arts aantekening medicijn

OODB of RDB ? Recursieve navigatie … Je moet complexe objecten persisten, je doet veel navigatie  OODB is beter en sneller. Platte objecten, je doet vaak query op basis van data- domein (ipv navigatie)  RDB 24 Persoon Naam = “Octo” Vrienden Persoon geef alle vrienden van vrienden van x

ORDB vs OODB ORDB Eigen (uitgebreid) query taal (SQL) ondersteunt zowel navigatie en SQL query OODB Zoals in DB40: geen abstracte query taal Integreert goed met Java Voorstellen voor query taal: Xpath, CTL 25

Verbeteringen op je ontwerp Op je db-schema: normalisatie en de-normalisatie Op fysieke dataontwerp : indexing en clustering 26 IDNaamProdProdNaam 1035Bob555Appel 1123Patrick444Peer 2242Octo111Aardbei 444Peer Data redundatie  niet zuinig, en leid ook tot problemen en anomalieën.

Normalisatie Transformatie op je tabellen om data redundantie te minimaliseren  geen informatie verlies! 1NF.. 3NF 27 IDNaamProdProdNaam 1035Bob555Appel 1123Patrick444Peer 2242Octo111Aardbei 444Peer 1NF : geen herhalende groepen, en heeft een primaire sleutel. leidt tot problemen met query en joint.

Identificeer attribuut-afhankelijkheden In een tabel T, A,B  C (de combo van attributen A,B bepaalt C) als aan de hand van de waarden van A en B kunnen we de waarde van C in T bepalen. 28 IDNaamProdProdNaam 1035Bob555Appel 1123Patrick444Peer 2242Octo111Aardbei 2242Octo444Peer Partiële afhankelijkheid  redundantie.

2NF 2NF: 1NF en de tabel bevat geen partiële afhankelijkheid. 29 IDNaamProdProdNaam IDNaam IDNaam 555Appel 444Peer IDProdID Tabel BESTELLING Tabel PERSOONTabel BESTELLING Tabel PRODUCT

3NF Transitieve afhankelijkheid A  A’  B in T (Of, er is A’  B waar A’ geen onderdeel is van prim.sleutel)  weer redundantie. 3NF: 2NF, en geen trans. afhankelijkheden. 30 IDNaam Stad Prov 0BobUtrechtUTR 1PatrickUtrechtUTR 2BobAmsterdamNH Tabel PERSOON IDNaam Stad Prov UtrechtUTR AmsterdamNH Tabel PERSOON Tabel STAD

Denormalisatie Als je app vaak naar de stad en prov van persoon x vraagt  moet je nu eerst een join doen. Denormalisatie  zet het terug naar 2NF. Overweeg de tradeoff tussen query snelheid en anomalieën tgv redundantie. 31 IDNaam Stad Prov Tabel PERSOONTabel STAD

Fisieke db-ontwerp Uiteindelijk worden tabellen in fysieke bestanden in H-schijven opgeslagen. De formaat en technieken van deze bestanden bepalen ook de prestatie. Je beslist: Welk formaat ? (vb: heap, of met index) Mate van indexatie Wel of niet te clusteren 32

Index Hoe vind je persoon x in de opslag?  de records een voor een aflopen  Aflopen van een index-tabel is veel sneler! 33 IDNaam Stad Tabel PERSOON fysieke opslag ID als index

Secundaire indexen Je mag ook meerdere indextabellen introduceren… Trade off : Extra ruimte nodig per indextabel rekentijd overhead bij update en delete 34 IDNaam Stad Tabel PERSOON met ID als index Geef de record van persoon x met naam Bob  moet je weer hele tabel aflopen  intro “Naam” als index!

Cluster IDNaamKind 0Bob100 0Bob105 0Bob107 1Patrick0 35 IDNaam PIDKind Tabel PERSOONTabel OUDER App vraagt vaak naar joint van PERSOON en OUDER  cluster. cluster sleutel cluster block, kan geindexeerd

Cluster niet goed als je: vaak update/delete doet vaak PERSOON afzonderlijk moet aflopen 36 IDNaamKind 0Bob100 0Bob105 0Bob107 1Patrick0

Ruimte estimatie Hoeveel ruimte heb ik nodig  medebepalend voor keuze DB engine en hardware. Kijk ook vooruit! Stappen (met een voorbeeld) tabel BESTELLING, 1M records groei 15% per jaar  2M in 5 jaar tijd. Gemiddelde ruimteverbruik per rij, of maak een schatting: ID  VARCHAR(10)  10 bytes Naam  VARCHAR(100)  50 bytes … Totaal 200 bytes 37

Ruimte estimatie Totaal voor tabel BESTELLING 200 * 2M bytes Bereken ruimte overhead van indextabellen Stel ID, en Postcode als indexen In de orde van d*2M per indextabel Andere overhead  DB engine specifiek Doe dit voor de rest van tabellen. 38