MySQL - på vei mot PostgreSQL, Oracle? (del 2)
Bruksområder
Update Advisor holder styr på relevante oppdateringer for MySQL
Generelle bruksområder
Det er liten tvil om at MySQL er den mest utbredte databasen for bruk på web. Et godt eksempel på dette er andelen av PHP-applikasjoner som benytter MySQL som databasegrunnlag. Et lite grunnlag kan man skaffe seg ved å besøke scriptarkivet hotscripts.com. Dersom man lister ut de forskjellige kategoriene og legger merke til de som benytter en eller annen form for database i bunn, ser man raskt at vår kjære svenskproduserte venn definitivt dominerer.
Bruksområdet for MySQL kan gjerne defineres til "alt som har med web å gjøre", men som med alle andre produkter finnes det både fordeler og ulemper.
Noen generelt gode bruksområder for MySQL:
- Publiseringsløsninger
- Forum
- Gjestebøker
- Bannersystemer
- Blog
- Portalfunksjoner, polls, tilbakemeldinger, osv.
- Innloggingssystemer, kundeweb
- FAQ
Kort sagt: All data som hentes inn fra web eller vises på web kan lagres i MySQL. Dersom man skal velge en databaseløsning er det nok kanskje viktigere å kartlegge hvorvidt segmentet man havner innenfor vil kreve mer enn MySQL kan tilby. Bør bedrifter egentlig velge en annen løsning?
De enkle prinsippene for MySQL ligger fortsatt til grunn for dagens versjoner - selv om det riktignok etterhvert har dukket opp mer avanserte funksjonalitet og tabelltyper.
Dagens systemer som kjører MySQL er gjerne enkle applikasjoner (i den forstand et forum kan defineres som enkelt). Størsteparten av disse faller heller ikke innenfor rammen av virksomhetskritiske systemer. Disse webapplikasjonene er gjerne basert på MySQLs MyISAM tabelltype, som forsåvidt er en meget stabil teknologi, men som mangler avansert funksjonalitet som transaksjonsstøtte og triggere.
Det største bruksområdet for MySQL har derfor tradisjonelt vært webapplikasjoner der budsjettet er begrenset eller kravet til spesielt avansert funksjonalitet er nedprioritert. Størsteparten av dagens nettsteder på internett som bruker MySQL faller nettopp innenfor denne kategorien.
Dersom du skal sette opp en firmanettside som ikke nødvendvis er del av et større applikasjonsrammeverk fra Microsoft eller en annen gigantaktør med foretrukket databaseplattform er dermed MySQL et godt valg.
Man skal imidlertid også være klar over at det finnes en god del virksomhetskritiske systemer som faktisk kjører på MySQL. Databasen har rykte på seg for å være svært stabil, noe som har kanskje har sammenheng med enkelt design og effektiv virkemåte.
Frem til nå har man bare kunnet glemme å lage mer avanserte systemer basert på triggere og "stored procedures" med MySQL. Versjon 5 kommer imidlertid til å bane vei for titalls nye finesser som på mange måter vil sette MySQL på nesten samme funksjonelt sted som de mer sofistikerte databasesystemene.
Versjon 4.0 introduserte flere finesser som medførte at MySQL ble enda mer aktuell for tjenester som hadde større tekniske krav. I skrivende stund er det versjon 4.1 som er "stable", mens 5.0 sies å være rett rundt hjørnet - med enda mer spennende funksjonalitet for "enterprise"-segmentet.
For å kunne danne grunnlaget for "high-availability"-tjenester og kunne konkurrere med de andre databasesystemene er det en del funksjonalitet som etterspørres.
Teknisk og "high-availability"
MySQL NDB Cluster
High-availability med MySQL
Dersom man skal sette opp et "high-availability" databasesystem basert på MySQL kan man velge om man vil gjøre dette på hardwarelaget, applikasjonsnivå eller en blanding av begge deler.
Den enkleste, men kanskje også dyreste måten å få til dette på, er å kjøpe inn et SAN med mest mulig redunans på maskinvaren. Videre kan man eksempelvis kjøre data over Fibre Channel eller InfiniBand for å få høy overføringshastighet.
MySQL har lenge hatt støtte for replikering på applikasjonsnivå, noe som gjør at man kan synkronisere "master" med opptil flere slaver. Tredjeparts firma har også utviklet spesielle cluster-pakker, men også på disse har man noen begrensninger som gjerne går på hva slags type spørringer man kjører og hvorvidt man velger asynkron eller synkron oppdatering mellom de forskjellige boksene.
"High-availability" er ikke det letteste man kan gjøre med MySQL, men det er overkommelig. Man skal være oppmerksom på at prisen øker betraktelig med tanke på maskinvare og eventuell tredjeparts programvare. Størsteparten av dagens bedriftsbrukere kan kanskje være like godt tjent med å kjøre en kraftig boks der man replikerer og har gode overvåkningssystemer som gjør at man kan bytte om i løpet av minutter.
SQL-standard
Det bestrebes at MySQL skal følge ANSI/ISO SQL standarden, men uten at dette skal få konsekvenser for ytelse og kvalitet. MySQL har enkelte forskjeller og utvidelser fra standarden.
Forskjellene omfatter blant annet kommandoen REVOKE og datatypen VARCHAR, mens listen over utvidelser er relativt lang. Komplett liste over tilleggsfunksjonalitet sammenlignet med standard SQL kan du se her: MySQL Extensions to Standard SQL.
Noe av denne tilleggsfunksjonaliteten går blant annet på å kontrollere datafilene (bl.a. check, optimize, repair table), nullstille loggfiler (flush) samt utvidet mulighet til å hente ut/modifisere data i spørringene (if exists, last_insert_id).
Fra og med versjon 4.1 støttes "subqueries", som gjør at man kan benytte SELECT i SELECT (eks. "select * from tabell1 where kol1=(select kol1 from tabell2)").
Cluster-funksjonalitet
Et cluster (eller klynge) defineres gjerne på flere forskjellige måter avhengig av hvilken leverandør man snakker med. I vårt tilfelle er det to tilfeller som er interessante:"failover" og lastbalansering.
MySQL har utviklet sin egen, innebygde cluster-teknologi som heter NDB. På papiret ser denne meget bra ut, men har absolutt sine begrensninger i praktisk bruk. Dagens versjon av NDB krever at hele databasen ligger i minnet. I tillegg er det en del tilfeller der clusteret vil fungere tregere enn en enkelt boks (eks. COUNT) fordi man er avhengig av å aksessere disken på systemene.
NDB fungerer i versjon 4.1, men det kommer en kraftig forbedret utgave med MySQL 5.x. Foreløpig kan man imidlertid neppe si at dette er et cluster som løser problemet for bedrifter flest.
Det finnes en rekke tredjeparts leverandører som har spesialisert seg på å utvikle cluster-programvare til MySQL. Valget av cluster-type henger vanligvis sammen med hva slags spørringer man skal kjøre samt antall kroner og øre man er villig til å svi av for å kjøpe seg ekstra sikkerhet og eventuelt skaleringsmulighet.
Dersom man er avhengig av å lastbalansere kan man eksempelvis sette opp et replikeringssystem og kjøre alle SELECT-spørringer mot slavene, mens alle UPDATE/INSERT går mot master. Et annet alternativ er å bruke NDB eller tredjeparts software - i disse to tilfellene kan man også få failover-funksjonalitet.
Replikering
MySQL har hatt støtte for replikering av databaser siden versjon 3.23.x. Dette er en teknikk som gjør at man kan lage en "live" kopi av databasen på en annen server. I dette tilfellet støttes også lastbalansering (til en viss grad)- riktignok kun på SELECTS ettersom teknikken bruker master-slave-prinsippet.
Dersom master går ned vil også alle slavene være nede. For å løse dette kan man enten foreta manuell omkonfigurasjon eller ha noen lekre script som sjekker statuser for videre å pumpe inn ny konfigurasjon.
Rollback
InnoDB og BDB gir støtte for transaksjoner i MySQL. Begge disse tabelltypene gjør at man kan tilbakeføre data ved å benytte rollback-funksjonen. Man skal være oppmerksom på at MyISAM, som er standard tabelltype for MySQL, ikke gir muligheten for rollback.
Stored procedures
Dette er SQL-strenger som kan lagres på serveren. "Stored procedures" gjør at klienten kan referere til denne istedet for å selv eksekvere en lang liste med SQL-strenger. Dette sparer klienten for mye arbeid og gjør at mye funksjonalitet kan lagres server-side.
Denne funksjonaliteten vil bli tilgjengelig i MySQL 5.0 og standarden som følges er SQL:2003-syntaksen (samme som IBM DB2)
Triggere
En såkalt "trigger" er et databaseobjekt som aktiveres når noe definert skjer i en tabell. En prosedyre kan eksempelvis eksekveres dersom det kjøres UPDATE mot tabellens data. Triggere vil bli tilgjengelig i versjon 5.0.2.
Views
"Views" er hensiktsmessig når man ønsker begrense brukeraksess til definerte typer data i rader fordelt over flere tabeller. MySQL forventes å bli implementert med slik funksjonalitet i versjon 5.1.
Sammenlikning mot Oracle, MS SQL, Firebird og PostgreSQL
I kommende tabell sammenlignes det med siste "stable" versjon av de ulike databaseserverene. For MySQL betyr dette versjon 4.1. Legg merke til at 5.0 har en rekke forbedringer og lanseres i løpet av året.
En kort sammenligning over sentral funksjonalitet:
| MySQL | Oracle | MSSQL | Firebird | Postgre | |
|---|---|---|---|---|---|
| Views | v.5.x | x | x | x | x |
| Triggere | v.5.x | x | x | x | x |
| Stored Procedures | v.5.x | x | x | x | x |
| Cluster-funksjonalitet | x | x | x | ||
| Transaksjoner | x | x | x | x | x |
Samtlige databasetyper tillater indeksering, men Oracle har den mest komplekse strukturen og tillater optimalisering på et helt annet nivå enn sine konkurrenter.
MySQL blir ofte sammenlignet med PostgreSQL ettersom begge er gratis tilgjengelig i de fleste sammenhenger. For mange er ikke dette nødvendigvis en teknisk sammenlikning, men kan ha minst like mange religiøse undertoner som Linux vs. Windows.
Som vi har vært inne på før er MySQL en database med enkel, teknisk struktur - sammenlignet med eksempelvis PostgreSQL eller Oracle. Dette har imidlertid ført til en rekke fordeler:
- Enkelhet gir lav brukerterskel
- Enkel, teknisk struktur gir høy applikasjonsytelse
- Liten kompleksitet medfører god stabilitet
Overnevnte punkter har vært en medvirkende faktor til at den er førstevalget for PHP-programmerere ettersom disse applikasjonene stort sett ikke trenger avanserte finesser som triggere og "stored procedures".
Det går selvsagt også an å benytte MySQL til annet enn webapplikasjoner, men dersom man trenger avansert funksjonalitet må man altså foreløpig vurdere å benytte et annet system.
Oracle, DB2 og MS SQL representerer de store, kommersielle systemene der trygghet og stor lagringskapasitet står sentralt. PostgreSQL og Firebird befinner seg gjerne i et midtre segment og har faktisk en del fans i utdanningssektorer. MySQL kan karakteriseres som selve databasestandarden for webapplikasjoner.
Ytelse
MySQL har rykte på seg for å være rask. Dette stemmer i de fleste tilfeller, men også her har man begrensninger. Så lenge man ikke skal gjøre kompliserte SELECT, er det faktisk lite som slår MySQL rent ytelsesmessig - ikke engang Oracle.
Når spørringene begynner å inkludere haugevis av SUBQUERIES og eventuelt JOINS er sagaen en helt annen.
Enkelhet gir høy ytelse - dessverre er ikke skalerbarheten lineær med stigende kompleksitet i SQL-spørringer.
MyISAM-tabellen har svært god ytelse på SELECT, men har den begrensningen at hele tabellen må låses dersom man skal kjøre en UPDATE. Rent skaleringsmessig kan det dermed heller være lønnsomt å velge InnoDB, som kun låser den raden som skal oppdateres.
InnoDB er noe tregere dersom man ser på én enkelt spørring, men har sine fordeler der man har mye trafikk som skal oppdatere databasen.
Hva skjer fremover?
MySQL satser på "enterprise"-segmentet
Fremtiden?
De forskjellige databasesystemene blir stadig bedre, men rent teknologisk er det nok MySQL 5 som kanskje utgjør det mest spennende produktet i nær fremtid.
Databasen vil ikke nødvendigvis by på noe annen funksjonalitet enn det som allerede finnes hos konkurrentene. Dersom enkelheten ivaretas er imidlertid sjansen stor for at MySQL fremover vil innta nye segmenter som tradisjonelt har vært forbeholdt mer komplekse databasesystemer.
Et lite utdrag av nytt i MySQL 5.0:
- Datatypen BIT
- Grunnleggende støtte for "cursor"
- Data Dictionary
- Instance Manager
- Precision math
- Stored Procedures
- Strict Mode og Standard Error Handling
- Triggere
- VARCHAR med lengde på 65 532 byte
- Views
Som man kan se er det mye kjærkommen funksjonalitet som er i ferd med å bli standard på MySQL. Databasen vil fortsatt være perfekt til bruk i websammenheng, men vil kanskje etterhvert begi seg inn i mer virkomhetskritiske segmenter der man trenger avansert funksjonalitet og garantier for stabilitet.
MySQL AB har lansert en egen produktserie for bedrifter som trenger ytterligere trygghet. MySQL Network inkluderer en gjennomtestet versjon av databaseserveren, rådgivningsapplikasjon for oppdateringer, sentral "knowledgebase" og teknisk kundestøtte 24/7.
MySQL vil stjele mye av oppmerksomheten dette året ettersom man virkelig tar et stort steg i riktig retning.
Både Firebird og PostgreSQL er reelle funksjonelle alternativer, men har ikke den samme brukermassen og anerkjennelsen i websegmentet.
MS SQL danner selvsagt et godt grunnlag for store mengder Windows-applikasjoner og ASP-plattformer, men også her har man en viss lisenskostnad. Databasen kan på mange måter sammenlignes med Oracle og IBM DB2 (noe Microsoft liker å gjøre), men har større utbredelse i webhostingmiljøet.
I virksomhetskritiske systemer er det imidlertid sjelden noe som slår Oracle sitt merkenavn, men prisen er også deretter - spesielt dersom man har behov for flere prosessorer eller kjerner.
Det er sjelden problemer med MySQL og man skal være oppmerksom på at man får utrolig mye for prisen av kroner null - ytelse, enkelhet, applikasjonsstøtte, erfaringer og stabilitet i toppklasse. Dersom man trenger kommersiell støtte og er villig til å betale for dette finnes det nok av tredjeparts leverandører som vil stille opp og hjelpe deg med det.
Siden MySQL 5 er rett rundt hjørnet vil det ikke lenger være noe argument for å velge mer kompliserte systemer bare på grunn av subqueries og triggere. Rent strategimessig satser også MySQL AB stadig mer på "enterprise"-segmentet, slik at man ikke vil velge et "statisk" produkt.
Selv om kanskje enkelte leverandører vil påstå noe annet, finnes det ikke noe perfekt databasesystem som er like bra på alle punkter. Dersom du står ved et veiskille bør du uansett sette ned både kortsiktige og langsiktige krav for videre å sammenligne disse opp mot spesifikasjonene på de forskjellige databasene.
Anbefalt litteratur
- Fermi National Accelerator Library: Comparison of Oracle, MySQL and PostgreSQL DBMS
- MySQL: Database Server Feature Comparisons
- Open Source Database Software Comparison
- Utah PHP Users Group: Comparison: MySQL vs. PostgreSQL
- DevX: PostgreSQL vs. MySQL vs. Commercial Databases: It's All About What You Need