Vad är en Data Lake?

Systemutveckling

Big Data och Data Lake är begrepp som ofta nämns, men som ofta blir ganska svåra att förstå rent konkret, och det blir framför allt ganska otydligt vad som skiljer dessa begrepp från exempelvis ett Data Warehouse.

Som en del av en längre diskussion kring Big Data och vägen till Hadoop så kommer jag här att beröra begreppet Data Lake.

Det finns ett känt citat av James Dixon (grundare och CTO på Pentaho) som gör liknelsen att om ett traditionellt Data Warehouse är som vatten på flaska, så är en Data Lake mer som en naturlig vattensamling där data flödar in och användare kan använda det i olika former.

Data Warehouse
“If you think of a data mart as a store of bottled water — cleansed and packaged and structured for easy consumption — the data lake is a large body of water in a more natural state. The contents of the data lake stream in from a source to fill the lake, and various users of the lake can come to examine, dive in, or take samples.” 

- James Dixon, CTO Pentaho

Data lake

Typiska skillnader mellan en Data Lake och ett Data Warehouse är framför allt hur man hanterar data som kommer in, hur man lagrar den, samt hur man tillhandahåller den.

Enkelt uttryckt kan man säga att man laddar data i ett Data Warehouse när man vet vad man ska använda det till, samt att man har bestämt hur datamodellen ska se ut. Generellt så lagrar man då endast data som man ser har direkt värde. Om datamodellen inte innehåller en viss typ av data, och det inte finns krav på den, så brukar den traditionellt sett inte heller lagras.

Traditionellt så kallas detta för ETL(Extract Transform Load), och leder ofta till att förändringar kräver både tunga omkörningar och i de flesta fall också ganska långa leveranstider. Tänk på Murphys lag och att allt förr eller senare kommer att behöva ändras.

Ett annat sätt att göra detta på är så som man gör i en Data Lake, dvs. ELT (Extract Load Transform), dvs. du lagrar data innan du transformerar det. Det gör att förändringar blir enkla, och man kan även låta användare ha olika datamodeller (där det är lämpligt), på exakt samma lagrade data.

Ett annat sätt att uttrycka detta är att säga att Data Warehouse jobbar med Schema-on-Write medans Data Lake jobbar med Schema-on-Read.

Det betyder i klarspråk att man kan använda samma data även om man ändrar datamodell, samt att man kan anpassa datamodell för olika användare.

En viktig aspekt är också att väldigt tydligt prata om olika syften som en Data Lake kan ha, och framför allt vilka möjligheter som “allt data på ett ställe” faktiskt ger dig.

Tänk så här, om du hade allt historiskt data, inklusive när det processades, vad skulle du kunna göra med det?

“The main challenge is not creating a data lake, but taking advantage of the opportunities it presents.“- Sean Martin, CTO of Cambridge Semantics

En Data Lake bygger i slutändan på ett antal antaganden:

All data är värdefull (storing makes sense)Datakällor är väldigt olika (data is diverse)Data används på olika sätt (use cases are diverse)Data och hur den används förändras över tiden (cope with changes)

I nästa inlägg så kommer jag att bygga vidare från begreppet Data Lake och ta upp Hadoop, vad det är, hur man ska tänka, samt vad som gör det till något annat än en databas.

Skrivet av: