Print This Post

In juni van dit jaar publiceerde DB/M een artikel van Karien Verhagen en Bart Vrijkorte, waarin Data Vault als techniek voor het modelleren van centrale datawarehouses wordt vergeleken met “relationele” (bedoeld wordt: 3NF) modellering. Naast voordelen benoemen de auteurs ook enkele bezwaren van de methodiek.

De opgeworpen bezwaren snijden echter naar mijn mening geen hout in een datawarehouse-context. Om een modellering voor datawarehouses te beoordelen, zul je daar op z’n minst met een datawarehouse-bril naar moeten kijken. Dat lijkt een open deur, maar in dit geval lijken de auteurs eerder een OLTP-bril op te hebben. Het resultaat is een vertekend beeld van de sterktes en zwaktes van Data Vault.

Datawarehouse != OLTP

Het datamodel van een datawarehouse heeft een totaal andere rol dan dat van een OLTP-systeem.
Een datawarehouse doet niets anders dan elders gecreëerde gegevens ontvangen, opslaan en weer afstaan – en dat in grote hoeveelheden. Daarbij speelt verwerkingssnelheid een belangrijke rol, want de totale verwerking moet meestal binnen een beperkt batchwindow plaatsvinden. Verder weten we inmiddels dat het ETL-proces 70% van de totale ontwikkel- en onderhoudsinspanning en -kosten in beslag neemt; hoe beheer(s)baarder het proces is, hoe meer dat scheelt in de kosten.

Deze factoren bepalen de inrichting van het datawarehouseproces. Dat vertaalt zich in uitgangspunten als:

  • liever vele simpele, gestandaardiseerde ETL-procedures dan een klein(er) aantal complexere, customized procedures
  • inserts hebben de voorkeur boven updates
  • eventuele datakwaliteitscontroles op de invoer doe je niet met database constraints, maar in het ETL-proces (aangezien dat meestal beter performt)
  • zo min mogelijk onderlinge afhankelijkheden tussen laadprocedures: enerzijds om het proces overzichtelijk en onderhoudbaar te houden; anderzijds om maximaal te kunnen parallelliseren, wat bijdraagt aan de schaalbaarheid van het proces

Het datawarehouse-model is sterk bepalend voor de mate waarin deze uitgangspunten gerealiseerd kunnen worden. (Data Vault is speciaal ontworpen om maximale ondersteuning te bieden). Niets in het artikel wijst er echter op dat de auteurs deze rol van het datamodel hebben laten meewegen in hun beoordeling.

Laten we eens enkele van hun bezwaren onder de loep nemen.

Geen constraints

Verhagen en Vrijkorte zien het als een risico dat Data Vault relaties tussen entiteiten altijd weggeneraliseert naar n:m-cardinaliteit: daarmee valt immers de controle in de database op invoer van de juiste cardinaliteit weg.

Zoals gezegd: als je die controle al wilt uitoefenen, dan doe je dat in je ETL-proces, niet in de database (in tegenstelling tot wat de auteurs suggereren, is dat geen Data Vault-bedenksel, maar een geaccepteerde best practice in datawarehouseland).
De Data Vault-filosofie gaat echter nog verder: het centrale datawarehouse wordt beschouwd als een system of fact, dat *alle* aangeleverde gegevens moet kunnen verwerken – het oordeel “deugdelijk of niet” wordt pas onderweg naar de datamart geveld, op basis van de criteria van de eindgebruiker. Aan de poort worden dus überhaupt geen controles uitgevoerd (behalve om gegevens uit te filteren waar het systeem technisch niet mee uit de voeten kan, bijv. vanwege verkeerde gegevensformaten).
Een Data Vault-model moet dus kunnen omgaan met gegevens die eigenlijk een verkeerde cardinaliteit hebben. En dan is het juist heel verstandig – zo niet noodzakelijk – om a) zo min mogelijk constraints in het model op te nemen, en b) deze daar waar ze onvermijdelijk zijn zo ruim mogelijk te definiëren. Het gebruik van linktabellen, waardoor iedere relatie per definitie de ruimste cardinaliteit krijgt, is dan de meest logische maatregel.

Linktabellen vs foreign keys

Verder stellen Verhagen en Vrijkorte dat in sommige situaties1 het gebruik van een linktabel “weinig toegevoegde waarde lijkt te hebben” (waarom dat zo zou zijn, wordt niet nader onderbouwd), en zijn van mening dat het “het beste lijkt” om maar gewoon een foreign key te gebruiken.

Ook nu wordt niet de impact meegewogen die modelkeuzes hebben op het ETL-proces. De meerwaarde van de linktabel zit hem nl. in de modelmatige ontkoppeling van de hubs, en daarmee van de bijbehorende laadprocedures. Hierdoor wordt het aantal synchronization points in het proces geminimaliseerd: eerst worden alle hubs parallel geladen, daarna alle links parallel, daarna alle satellites parallel. (Als er voldoende processing power voorhanden is, is het zelfs mogelijk om de hub-satellites gelijktijdig met de links te laden.)
Doordat de onderlinge wachttijd tussen jobs minimaal is, worden het batchwindow en de beschikbare resources optimaal benut; dit komt de schaalbaarheid van het proces ten goede.
Verder is het voor ontwikkeling en onderhoud van ETL-processen een voordeel als laadprocedures zo min mogelijk onderling afhankelijk zijn: de processen worden er flexibeler en minder complex van.

Door de hubs aan elkaar te knopen via foreign keys loop je al die voordelen mis, omdat de hubs nu noodgedwongen serieel moeten worden geladen. Het beslag op het batchwindow wordt daarmee groter dan nodig, en de schaalbaarheid van het proces loopt eveneens terug. Bovendien maakt de onderlinge afhankelijkheid het ETL-proces complexer, en dus slechter onderhoudbaar.

End user access?

Tenslotte noemen de auteurs nog als bezwaar dat Data Vault-modellen lastig bevraagbaar zijn door eindgebruikers. De observatie klopt - maar is het ook een probleem? De modellering is specifiek bedoeld voor het centrale datawarehouse, en daar heeft de eindgebruiker sowieso niets te zoeken. Is het een nadeel als in een restaurant de keuken niet even sfeervol is ingericht als de eetzaal?

Conclusie

Data Vault heeft zijn sterke en zwakke kanten; omdat het concept nog maar net in opkomst is, zijn met name over de zwaktes nog weinig ervaringsfeiten voorhanden.
Bij afwezigheid daarvan, kan discussie een uitstekend middel zijn om onze beeldvorming aan te scherpen - maar dan moeten we die wel voeren met geldige argumenten.



  1. de auteurs doelen hier op zgn. “zwakke entiteiten”: entiteiten die (deels) gedefinieerd c.q. geïdentificeerd worden door hun relatie met een andere entiteit, waardoor die relatie de facto onveranderlijk is. Een voorbeeld is de relatie van een factuurregel met de factuur waarop hij voorkomt.

Print This Post
  • email
  • del.icio.us
  • Twitter
  • LinkedIn
  • Digg
  • Facebook
  • Google Bookmarks
Trackback URI: http://blog.grey-matter.nl/de-rol-van-het-datamodel-in-het-datawarehouse/trackback/

Back to home page
« Data Vault en brononafhankelijkheid BI: to ROI or not to ROI »
17 Responses to “De rol van het datamodel in het datawarehouse”
 

lidwine - great post. Helemaal mee eens. Ik zou graag de self-proclaimed analisten uitdagen om eerst met methodologieen daadwerkelijk projecten en producten te realiseren, voordat er conclusies worden geschreven. Naar mijn idee een toenemende trend dat er teveel wordt geschreven over zaken die men nooit ECHT heeft toegepast.

Ik heb een link van mijn blog naar jouw blog gezet omdat naar mijn mening zoveel mogelijk mensen dit moeten lezen!!

Ronald

Ronald Damhof wrote on September 29th, 2008 at 16:21

 

lidwine - top! Je bent nog erg vriendelijk en serieus. Een ingezonden brief of artikel in DB/M zou zeker op zijn plaats zijn. Het wordt tijd voor de alliance against… Ronald?

wouter wrote on September 29th, 2008 at 18:46

 

Goede post.

Wat er nog bijkomt zijn specifieke modelleringissues rond tijdgedreven sleutels en problemen bij mutaties binnen 3NF gegevensmodellen (het zgn. delta probleem). Ook daar doet DV het gewoon veel beter dan de 3NF.

Overigens, *als* je zo graag wilt normaliseren in het centrale EDW en ook nog tijdgedreven willen werken, dan doe je dat in 6NF(Zesde Normaalvorm!) of tussen 5NF en 6NF in en niet in 3NF!!!
(Maar als je dan zonodig maar beperkt wilt normaliseren, gebruik dan in ieder geval de Boyce-Codd normaalvorm(BCNF) ipv. 3NF.
Dan kun je iig de (tijdgerelateerde) afhankelijkheid van attributen van Business Keys op een correcte manier vergelijken met de DV aanpak.)

M Evers wrote on September 30th, 2008 at 10:40

 

[...] that some of us still don’t understand. Consider for example Lidwine van As’ excellent criticism (in Dutch) on an article that completely misinterpretes the Data Vault. As long as we see this [...]

 

Thanks y’all :-)

@M Evers: ken je “Anchor Modeling”? (http://www.anchormodeling.com/)

Doet in de verte denken aan Data Vault modellering, maar dan volledig 6NF-gebaseerd. Er is nog weinig informatie over te vinden, maar het lijkt de moeite van het onderzoeken waard.

Lidwine van As wrote on October 3rd, 2008 at 15:41

 

@Lidwine,

Daar ben ik idd mee bekend. leuke techniek, maar stelt eisen aan je DBMS en aan je DWH grootte (werkt volgens Lars Rohnback (de onwtikkelaar) b.v. goed op SQL server tot 4TB, mits goed getuned, maar werkt ronduit slecht op Oracle).
Volgens Dan (The Man) is het in feite een correcte variant van DV (itt bv. BIReady), dus je zou het kunnen/mogen gebruiken in een DV aanpak. Het artikel rond Anchor Modeling kan nu wel een keer in publicatie komen (er is al een nieuwe website voor!).

M. Evers wrote on October 3rd, 2008 at 19:59

 

Ik zou graag de argumenten van Dan The Man (?) willen horen waarom BIReady geen coorecte variant op DV is.

Gertjan wrote on February 4th, 2009 at 14:15

 

Gertjan,

Ik heb Dan (linstedt) deze vraag persoonlijk gesteld. Hij had 2 argumenten, 1 is de transparantie van BIReady(het is niet *volledige* transparant) en 2 is de historie van historie, die soms herstructurering van tijdlijnen en daarmee ook herstructurering van records vergt.

Dan is daar zeer strikt in. Aan eenmaal ingevoerde records in een DV blijf je ten alle tijde af.

Hier kan ik enigzins inkomen. Ik was dan ook samen met JJ van der Linden begonnen met een kleine inventarisatie van de verschillende alternatieven rond het opslaan van historie v. historie in een DV. Dit ligt wat mij betreft op dit moment even stil vanwege de geboorte van onze zoon.

Kortom, to be continued…

PS, je kunt me voor verdere discussie ook via linkedin bereiken.

Martijn Evers wrote on February 4th, 2009 at 15:01

 

Martijn, bedankt voor je selle reactie (en gefeliciteerd met de kleine).
Leuk dat je de vraag zo direct aan Dan hebt gesteld. Wel vreemd hoe hij daarop antwoord. Dan heeft BIReady nooit gezien en zelfs geen in-depth briefing gehad. met zijn eerste opmerking “niet volledig ransparant’ kan ik niet zo veel, omdat ik niet weet wat hij hiermee bedoeld. De tweede opmerking over hoe History of History is gemplementeerd is incorrect. Er worden geen records geherstructureerd binnen BIReady.
Ik ben graag bereid eens met jou en JJmee te denken over History of Hstory opslag binnen DV.

Ik zal weer eens contact met Dan opnemen, want het is toch in alle DV-aanhanger’s belang als dit met 1 druk op de knop geiplementeerd kan worden?

Gertjan wrote on February 5th, 2009 at 10:17

 

Gertjan,

Ik ben het met je eens dat dit opgehelderd moet worden. Helaas laat Dan (volgens JJ) historie v. historie een beetje links liggen, vandaar ook onze inventarisatie.

We houden nog contact.

Martijn Evers wrote on February 5th, 2009 at 10:35

 

Anchor Modeling works just as well in Oracle (10gR2 and later). We recently showed that the technique called “table elimination” on which AM relies to achieve it’s high performance is present in the query optimizers of Microsoft SQL Server, Oracle, DB2 and PostgreSQL. MySQL still lacks support, but we have been in contact with the developers. Sybase is yet to be tested.

Regards,
Lars

Lars Rönnbäck wrote on May 1st, 2009 at 10:50

 

Hoi,

Even over Anchor Modeling. Ik zag dat ze nu eindelijk een paper gepubliceerd hebben. Zie deze blog link: http://syslab.dsv.su.se/profiles/blogs/anchor-modeling

Groeten,
JJ.

Juan José wrote on October 20th, 2009 at 10:41

 

@JJ: bedankt voor de tip!

Zijn jij en Martijn al verder gekomen met jullie onderzoek naar historie van historie?

Groeten,
Lidwine

Lidwine van As wrote on October 21st, 2009 at 09:44

 

@Lidwine,

Je wordt op je wenken bediend. Het staat voor volgende week ma. op de agenda van ons (jaarlijks?) DV overleg.

Martijn Evers wrote on October 21st, 2009 at 10:15

 

Met de kritiek van Lidwine op het artikel van Karien en Bart ben ik het grotendeels eens. Toch zijn er nog wel want kantekeningen te maken bij de link tabellen. Het ligt behoorlijk subtiel. Ik ben bezig met een artikel voor DB/M waarin ik dat gedetailleerd uiteen ga zetten, maar voor de deelnemers aan deze discussie vast een voorproefje:

Natuurlijk is het DWH niet bedoeld om constraints te bewaken, helemaal mee eens. Maar we moeten ons wel realiseren dat je met het database ontwerp van het DWH, ook in DV, wel degelijk rekening houdt met ‘business rules’. Voorbeeld: als we van een attribuut, bijvoorbeeld de postcode van een klant, in een satelliet tabel de historie bij houden, dan is iedereen het erover eens dat deze tabel een vanaf - tot en met constructie met datums zit. Bedenk dan wel dat hier impliciet de aanname maken dat deze klant op 1 moment in de tijd slechts 1 postcode heeft. Hoe zit dat dan met een relatie tussen twee entiteiten die duidelijk 1-op-veel is (op 1 moment in tijd)? Aangezien je van Dan Lindstedt maar 1 soort link tabel mag hebben, moet je daar die aanname ineens laten vallen en altijd doen alsof relaties (ook zonder historie) veel-op-veel zijn.

Harm wrote on October 21st, 2009 at 11:35

 

@Harm

Dan ook maar alvast een voorproefje van de daaropvolgende discussie.

Dit probleem is mijns inziens alleen op te vangen met een effectivity satteliet. Daar kun je als je meerdere active sat records toestaat wel kwijt wat de feitelijke associatie is op tijdstip x. Daarmee kun je dus door de tijd heen de effectieve associatie/relatie van je link aangeven. Hiervoor moet je echter de sturende sleutel van de link bron kennen (of met een Audit trail gaan werken)
Voor echte controlefreaks kun je ook door de tijd heen gaan bijhouden wat de sturende sleutel van de link is (met een verwijzing naar je metadata(meta vault?) bijvoorbeeld. Maar ik draaf nu natuurlijk wel een beetje door;)

Martijn Evers wrote on October 21st, 2009 at 11:57

 

@Harm

Ik gebruik altijd de satelliet van de link om bij te houden of het 1:n is of n:m is op een moment in de tijd. Ik voeg altijd een ‘valid’ boolean attribuut toe. Door nu je sleutels in de satelliet juist te kiezen kun je beide varianten bijhouden in de satelliet. Bij een 1:n is de ‘parent’ geen onderdeel van de sleutel en beschouw ik het als ‘data’ waarvan ik de historie bij moet houden tezamen met het valid attribuut. Bij een n:m beschouw ik alleen het valid attribuut als data. Dit maakt het laad proces generiek en alleen de keuze van de sleutels in de satelliet zorgt dan voor de juiste historische afhandeling.

Ik ben het dus met Martijn eens. Ik moet wel toegeven dat ik ook wel eens de link niet fysiek implementeer en alleen de satelliet van de link fysiek implementeer.

Juan José wrote on October 21st, 2009 at 14:23

Leave a Reply