15. Polyglot Persistence
I'm confident to say that if you’re starting a
new strategic enterprise application you
should no longer be assuming that your
persistence should be relational.
Martin Fowler
41. Takk for meg
• martinfowler.com
• qi4j.org
• nosqltapes.com
• bit.ly/nosql-landscape
Ole-Martin Mørk
Editor's Notes
Polyglot persistence\n
Hvor mange bruker relasjonsdatabaser i prosjektene sitt?\n
Hvem bruker nosql-databaser?\n
Hvorfor er det slik?\n\nnosql eksistert siden 70-tallet, dbm\n\nBEKK kjenner generelt ikke teknologien godt nok. Vi tør kanskje ikke jobbe hardt for å få bruke det.\nGjelder både salg og tech\nNoen har brukt det på fritidsprosjekter og noe kompetansebygging\nOfte kan arkitekter og dba-er være vanskelig å overbevise.\n\nMå ha kunnskap og motivasjon\n
Hvorfor bruker vi egentlig databaser?\nLagre data\nGjenfinne data via identifikator\nGjenfinne data gjennom søk\nLage rapporter\n
Oppfyller alle vilkårene.\n\nPERFEKT!\n\nVel.... Den gjør jobben. Men ikke perfekt. Til tider bra, men man må alltid veie lagring opp mot gjennfinning f.eks.\nog fulltekst-søk... Det tar tid det\nog søk gjennom mange relasjoner, det er vanskelig og det tar tid\n\nRapporter derimot, det er det ganske bra, som regel.\n
Oppfyller alle vilkårene.\n\nPERFEKT!\n\nVel.... Den gjør jobben. Men ikke perfekt. Til tider bra, men man må alltid veie lagring opp mot gjennfinning f.eks.\nog fulltekst-søk... Det tar tid det\nog søk gjennom mange relasjoner, det er vanskelig og det tar tid\n\nRapporter derimot, det er det ganske bra, som regel.\n
Oppfyller alle vilkårene.\n\nPERFEKT!\n\nVel.... Den gjør jobben. Men ikke perfekt. Til tider bra, men man må alltid veie lagring opp mot gjennfinning f.eks.\nog fulltekst-søk... Det tar tid det\nog søk gjennom mange relasjoner, det er vanskelig og det tar tid\n\nRapporter derimot, det er det ganske bra, som regel.\n
Oppfyller alle vilkårene.\n\nPERFEKT!\n\nVel.... Den gjør jobben. Men ikke perfekt. Til tider bra, men man må alltid veie lagring opp mot gjennfinning f.eks.\nog fulltekst-søk... Det tar tid det\nog søk gjennom mange relasjoner, det er vanskelig og det tar tid\n\nRapporter derimot, det er det ganske bra, som regel.\n
Oppfyller alle vilkårene.\n\nPERFEKT!\n\nVel.... Den gjør jobben. Men ikke perfekt. Til tider bra, men man må alltid veie lagring opp mot gjennfinning f.eks.\nog fulltekst-søk... Det tar tid det\nog søk gjennom mange relasjoner, det er vanskelig og det tar tid\n\nRapporter derimot, det er det ganske bra, som regel.\n
ORM er vanskelig\nØdelegger ytelse\n\n
OOP fra Venus\nDatabaser fra Mars \n\nSikkert hørt om “Impedance mismatch”?\n\nDe passer ikke sammen, og ødelegger for hver andre.\n\nVi gjør vårt aller beste for at det skal fungere, men av og til er det greit å skille lag\n
Hvis vi går tilbake til denne\n
Hva med å benytte database-teknologi som er optimalisert for det det skal brukes til?\n\n
Rickard Øberg\nEt callcenter system som hadde mange krav til gjenfinning og søk\nObject store (key/value) - rask lookup, det man trenger\nEvent store (jdbm) - lagrer eventer med unike timestamps\nQueries (graph) - graph databaser er bedre og raskere for graf-queries\nFulltext search (lucene) - fulltekst søk er bedre og raskere for fulltekst\nReports (mysql) - rapporter er generelt noe rdbms gjør bra\n\nEvent store er GUD, alt kan gjenskapes derfra\n\nUtrolig fleksibel modell\n\nKan spørre datamodellen spørsmål senere\n
Rickard Øberg\nEt callcenter system som hadde mange krav til gjenfinning og søk\nObject store (key/value) - rask lookup, det man trenger\nEvent store (jdbm) - lagrer eventer med unike timestamps\nQueries (graph) - graph databaser er bedre og raskere for graf-queries\nFulltext search (lucene) - fulltekst søk er bedre og raskere for fulltekst\nReports (mysql) - rapporter er generelt noe rdbms gjør bra\n\nEvent store er GUD, alt kan gjenskapes derfra\n\nUtrolig fleksibel modell\n\nKan spørre datamodellen spørsmål senere\n
Rickard Øberg\nEt callcenter system som hadde mange krav til gjenfinning og søk\nObject store (key/value) - rask lookup, det man trenger\nEvent store (jdbm) - lagrer eventer med unike timestamps\nQueries (graph) - graph databaser er bedre og raskere for graf-queries\nFulltext search (lucene) - fulltekst søk er bedre og raskere for fulltekst\nReports (mysql) - rapporter er generelt noe rdbms gjør bra\n\nEvent store er GUD, alt kan gjenskapes derfra\n\nUtrolig fleksibel modell\n\nKan spørre datamodellen spørsmål senere\n
Rickard Øberg\nEt callcenter system som hadde mange krav til gjenfinning og søk\nObject store (key/value) - rask lookup, det man trenger\nEvent store (jdbm) - lagrer eventer med unike timestamps\nQueries (graph) - graph databaser er bedre og raskere for graf-queries\nFulltext search (lucene) - fulltekst søk er bedre og raskere for fulltekst\nReports (mysql) - rapporter er generelt noe rdbms gjør bra\n\nEvent store er GUD, alt kan gjenskapes derfra\n\nUtrolig fleksibel modell\n\nKan spørre datamodellen spørsmål senere\n
Rickard Øberg\nEt callcenter system som hadde mange krav til gjenfinning og søk\nObject store (key/value) - rask lookup, det man trenger\nEvent store (jdbm) - lagrer eventer med unike timestamps\nQueries (graph) - graph databaser er bedre og raskere for graf-queries\nFulltext search (lucene) - fulltekst søk er bedre og raskere for fulltekst\nReports (mysql) - rapporter er generelt noe rdbms gjør bra\n\nEvent store er GUD, alt kan gjenskapes derfra\n\nUtrolig fleksibel modell\n\nKan spørre datamodellen spørsmål senere\n
\n
Martin Fowler sier\n\nI'm confident to say that if you’re starting a new strategic enterprise application you should no longer be assuming that your persistence should be relational.\n\n
Martin Fowler\nBruk riktig teknologi til riktig problem\n\nUtnytt de fordelene hver database gir\n\nLagre forskjellig data i forskjellige databaser\n\n\n
“Bare” programmeringsspråk\n\nVeldig viktig for utviklere og hastigheten i prosjektet, men ikke viktig for bedriften!\n
Et mye større skifte\n\nPåvirker hvordan bedriften organiserer og finner igjen sine data!\n\nI mange sammenhenger, sine viktigste assets\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
Atomisk - alt eller ingenting\nkonsistent - man skriver noe og kan lese det rett etterpå.\nIsolasjon - to transaksjoner skal ikke kunne påvirke hverandre\nVarighet - At data når det først er lagret, er lagret for evig\n
CAP theorem sier at du kun kan ha to av\nKonsistens\nTilgjengelighet\nPartisjonsvennlighet\n\nAlle databaser kan tunes her.\n\nKan få relasjonsdatabase partisjonsvennlig ved å strukturere dataene slik\nKan få cassandra konsistent ved å endre på konfigurasjon\n\nog Redis kan du gjøre alt mulig med\n
CAP theorem sier at du kun kan ha to av\nKonsistens\nTilgjengelighet\nPartisjonsvennlighet\n\nAlle databaser kan tunes her.\n\nKan få relasjonsdatabase partisjonsvennlig ved å strukturere dataene slik\nKan få cassandra konsistent ved å endre på konfigurasjon\n\nog Redis kan du gjøre alt mulig med\n
CAP theorem sier at du kun kan ha to av\nKonsistens\nTilgjengelighet\nPartisjonsvennlighet\n\nAlle databaser kan tunes her.\n\nKan få relasjonsdatabase partisjonsvennlig ved å strukturere dataene slik\nKan få cassandra konsistent ved å endre på konfigurasjon\n\nog Redis kan du gjøre alt mulig med\n
CAP theorem sier at du kun kan ha to av\nKonsistens\nTilgjengelighet\nPartisjonsvennlighet\n\nAlle databaser kan tunes her.\n\nKan få relasjonsdatabase partisjonsvennlig ved å strukturere dataene slik\nKan få cassandra konsistent ved å endre på konfigurasjon\n\nog Redis kan du gjøre alt mulig med\n
CAP theorem sier at du kun kan ha to av\nKonsistens\nTilgjengelighet\nPartisjonsvennlighet\n\nAlle databaser kan tunes her.\n\nKan få relasjonsdatabase partisjonsvennlig ved å strukturere dataene slik\nKan få cassandra konsistent ved å endre på konfigurasjon\n\nog Redis kan du gjøre alt mulig med\n
CAP theorem sier at du kun kan ha to av\nKonsistens\nTilgjengelighet\nPartisjonsvennlighet\n\nAlle databaser kan tunes her.\n\nKan få relasjonsdatabase partisjonsvennlig ved å strukturere dataene slik\nKan få cassandra konsistent ved å endre på konfigurasjon\n\nog Redis kan du gjøre alt mulig med\n
Ta med?\n
Vanligste problemet folk har.\n\nNosql er kult, men det der omsider konsistent greiene \n
Vanligste problemet folk har.\n\nNosql er kult, men det der omsider konsistent greiene \n
Vanligste problemet folk har.\n\nNosql er kult, men det der omsider konsistent greiene \n
Vanligste problemet folk har.\n\nNosql er kult, men det der omsider konsistent greiene \n
Spør heller kunden om det er greit med 1 sekund venting på oppdaterte data\n\nHa atomiske operasjoner\noppdater data, ikke overskriv\n\nog dataene vil bli korrekte... til slutt\n\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
Bank-kontoen din er eventual consistent\nBanken lar deg overtrekke kontoen hvis du vil\n\noperasjonene er atomiske\nvi mister ikke dem\nblir konsistent til slutt\n\nhvorfor tillatter banken eventuelt konsistent og ikke din kunde?\n\n
og hvis du absolutt må bruke ORM-lignende verktøy, så finnes det også\n
\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
Redis\nDette er på min maskin.\n\nKan med kraftig maskin og korrekt tuning få mysql opp i tilsvarende nummer for lesing, men skriving er værre\n\n\n
\n
Det er ikke lett\nMan mister gamle utfordringer, men de blir erstattet med nye.\n\nPolitikk, DBA mister kontroll\nArkitekten vil ikke ha enda flere systemer\nMye gammel legacy-data som er viktige\n\nMen begynner vi å bevege oss i denne retningen så vil vi bli bedre på data\n- Får bedre domenemodeller\n- Får mye bedre måter å finne igjen data på\n- Blir flinkere til å levere det kunden vil ha\n\nRelasjonsdatabasen er ikke det viktigste for kunden\n
Det var jeg ville si\n\nLykke til\n\nTakk for meg\n