Kim Alex Olsen
25.05.05 | kl. 10:21
MySQL 5.0
MySQL er verdens mest udbredte open source-database, med 6 mio. installationer ifølge deres egen opgørelse. Nu er MySQL er kommet i version 5. En version, der understøtter de nyeste teknologier indenfor relationsdatabaser.
MySQL har altid haltet lidt bagefter den anden store database PostgreSQL - men PostgreSQL har haft den akilleshæl, at den ikke har virket under Windows! Godt nok har den virket under Unix-emuleringen Cygwin, men denne har indtil for et par år siden har været besværlig at installere, og derfor afskrækkende for de fleste Windows-brugere. Nu virker Cygwin som en drøm og er meget let at installere direkte fra nettet, men det er en anden snak.
Den foretrukne database
Dette har betydet, at til trods for den lidt dårligere tekniske løsning har MySQL været den foretrukne database specielt for websteder - alle webhoteller med respekt for sig selv tilbyder en løsning med MySQL-databasen. Men svagheden har også betydet, at MySQL mest har været brugt i webløsninger og måske i interne databaser til opsamling af logfiler o.l. - den har ikke haft den store udbredelse i f.eks. OLTP-løsninger (On-Line Transaction Processing). Det prøver MySQL AB så at rette op på med den nye version 5.
Vil opad i systemet
Databasemarkedet har hidtil været domineret af diverse open source-databaser til de små løsninger, stigende med MS SQL Server til de lidt større og Oracle som prøver at brede sig ud til både de små og de helt store, som igen er domineret af DB2 til store transaktionsmængder. (Og nej - Access er IKKE en lille databaseløsning! Access er højst et interface til en database, eksempelvis MS SQL Server eller MySQL. Access filsystemet opfylder ikke kravene til at være en database.) Med version 5.0 prøver MySQL at brede sig opad i systemet, således at de kan konkurrere med MS SQL Server og Oracle, og det ser ud til at være lykkedes i forbavsende grad. Et væsentlig krav til databaser er, at de har transaktioner og læsekonsistens (ACID begrebet), begge dele opfylder MySQL til fulde. Man skal blot være opmærksom på, at man med MySQL grundlæggende kan vælge mellem forskellige filsystemer - MYISAM og INNODB. Begge har fordele. MYISAM er hurtig, men mangler transaktioner, som INNODB til gengæld tilbyder.
Opfylder alle krav
Men udover transaktioner er det store spørgsmål, hvilken version af SQL-standarden, databasen understøtter. Den oprindelige SQL-standard er SQL89, men den opfylder alle SQL-databaser. Derudover er der tre nyere standarder: SQL92, SQL99 og senest SQL2003 (se evt. www.wiscorp.com/SQLStandards.html). MySQL har i længere tid opfyldt kravene (stort set) til SQL92, og i version 5 opfylder de også stort set kravene til SQL99 - eksempelvis er både spatial data- og OLAP- (online analytical processing) features som cube og rollup med. Men der er også en del tiltag til at opfylde kravene til SQL2003.
Det nye i version 5
Det nye i version 5 er således views, stored procedures og triggers, understøttelse af for foreign keys, cascade delete, ny cursor support, multimaster replication og online backup, fuld subquery-understøttelse, online analytical processing functions for data warehousing, og en mere skalérbar thread/connection manager. Views er som bekendt noget gemt SQL-kode, der har til formål at lave en virtuel delmængde (groft sagt) af den egentlige tabel(-ler) på både række- og kolonne-niveau, og dette kan nu også lade sig gøre i MySQL.
Stored procedures
Stored procedures, som er del 4 i SQL2003-standarden, følger pænt forlægget fra standarden. Ideen i "stored procedures" er at nedsætte netværksbelastningen - i stedet for at fremsende en masse data fra databasen til klienten, som så sorterer en hel del fra, så kan man begrænse dataene ved kilden (databasen). Man kan også samle flere SQL-statements, foretage beregninger med videre. Det er en feature som Oracle, MS SQL Server og PostgreSQL har haft i flere år, men nu er den så også implementeret i MySQL. Det ser ok ud og er absolut et krav, hvis de vil konkurrere, men man kunne have ønsket sig en lidt mere fræk holdning - eksempelvis implementering af PHP som stored procedure-sprog. En database som PostgreSQL understøtter flere forskellige sprog til stored procedures, mens MySQL har nøjes med de statements som er defineret i standarden. Begin-End, IF, CASE, LOOP, WHILE, ITERATE, og LEAVE er implementeret, men endnu ikke FOR-statements. Man kan både danne procedurer og funktioner, men Oracle-brugere vil savne muligheden for at samle sine procedurer i pakker, ligesom syntaksen med kun at kunne sige CREATE i stedet for CREATE OR REPLACE. Men hvor det sidste kun er en mindre irritation, er det første et alvorligt problem, hvis man skal lave større databaseløsninger med stored procedures.
Triggere
Triggere og constraints er egentlig en afvigelse fra relationsdatabase-teorien - nu bygger man regler ind imellem de enkelte tabeller, så det nu igen minder om Codasyl, netværk og hierarkiske databaser. Men det er ikke til at komme udenom, hvis man vil sikre konsistens og høj datakvalitet i sin database. Det er kun en skrabet version af triggere der er implementeret i MySQL, eksempelvis kan man ikke referere andre tabeller i triggere og stored procedures (men man kan dog bruge cursors), og man kan ikke i triggere kalde stored procedures, så modulær programmering må vi undvære lidt endnu. Men der bliver arbejdet hårdt på udvidede funktionalitet i både triggere og stored procedures, så der er håb forude.
Bedre løsning
Del 11 af SQL2003 - Metadata - er nu også implementeret i MySQL - datadictionary-oplysninger, som kan fortælle hvilke tabeller der findes, og hvordan de ser ud, har længe været tyndt i MySQL. Men det er nu løst ved at implementere metadata-standarden. Det er gjort som foreslået i standarden med en ny database ved navn "information_schema". Der er dog afvigelser fra standarden - eksempelvis har MySQL ikke support for sekvenser, som de kendes fra standarden (og fra Oracle), men i stedet har den så autoincrement-felter, som det også kendes fra MS SQL Server. En efter min mening bedre løsning, da man med denne får en sammenhæng med feltet der skal optælles automatisk, hvor det med sekvenser som i Oracle mere er en logisk binding, hvor man bliver nødt til at udtrykke sammenbindingen med navnestandarder (f.eks. \'Emp_seq\' for en sekvens for tabellen \'employee\').
Spændende tiltag
Et rigtig spændende tiltag er planen om at opfylde SQL2003 del 14, som omhandler XML i databasen. Der er ikke nogen officiel dokumentation for dette, men jeg har set et stykke papir fra udviklingsafdelingen, hvor de arbejder med at få XML-delen implementeret, så selv om det ikke er med i den nyeste betaversion 5.04, så tyder meget på at det bliver en del af MySQL 5 (se også MySQL.r18.ru/~bar/myxml/XMLXpathSupportInMySQL.pdf). Så alt i alt en rimelig opfyldelse af SQL2003 standarden; selv om vi mangler nogle ting, er det absolut en brugbar database.
Savner "wait interface"
Performancemæssigt savner man som Oracle-bruger Oracles "wait interface", som gør, at man hele tiden kan finde flaskehalsen i en Oracle-database, men MySQL har til gengæld en "Slow Query Log", som kan lede en på sporet af det dårlige SQL som de uuddannede udviklere/brugere hele tiden får fyret af mod en database. Til de mere praktiske overvejelser: installationen forløber glat, og man kan snildt have flere versioner af MySQL kørende på samme tid, eksempelvis kan man selv bestemme servicenavn for databaseserver-processen. MySQL er også blevet inspireret af Oracles installationsprocedure, således at man kan vælge imellem at indstille testdatabasen til OLTP-, datawarehouse- eller mixed database-brug. Efter installationen har man en kørende database (uden data), som man kan begynde at bruge.
Gratis grafiske værktøjer
Der er to grafiske værktøjer, man kan downloade kvit og frit fra MySQLs hjemmeside, nemlig MySQL Administrator og MySQL Browser, som bl.a. erstatter den gamle MyCC. Administrator ser absolut interessant ud - man har her mulighed for at starte og stoppe sin database, men der er også grafer til at fortælle, hvordan belastningen af databasen er, ligesom man kan vedligeholde brugere/privilegier til databasen. En i øvrigt fuldt udbygget løsning på disse sikkerhedsmæssige vigtige tiltag i enhver database. Man kan tage backup af sin database og gendanne den, og man kan vedligeholde database-parametre. Så MySQL Administrator er absolut et must for enhver MySQL-databaseejer. MySQL Browser er knapt så heldigt udført - den er virkelig lagt an på nybegynderen, man kan f.eks. klikke sig frem til at få dannet noget SQL. Praktisk, hvis man ikke kender SQL, men alle os andre ville hellere have noget mere funktionalitet. Den er for meget beta til at blive taget alvorligt - brug langt hellere PHPMyAdmin eller et af de andre gratis alternativer (se også faktaboksen).
Nemt at konvertere
Et sidste værktøj, som MySQL AB leverer gratis, er MySQL Migration Toolkit - her tager de for alvor livtag med konkurrencen med Oracle og MS SQL Server. Dette værktøj giver simpelthen en nem måde at konvertere sin Oracle/MS SQL Server-database til MySQL. Det er grafisk, så man bliver taget ved hånden hele vejen. Der er selvfølgelig nogle logiske problemer - eksempelvis forskellen mellem autoincrement og sekvenser - her kan man selv opsætte nogle regler som skulle kunne hjælpe, men i praksis tror jeg nok, at man skal lave lidt manuelt arbejde. Der er også problemer med konvertering af stored procedures, men tabellerne bliver gnidningsløst konverteret. Fra en Oracle produktionsdatabase blev alle tabellerne blev pænt hjulpet over i MySQL-tabeller. Man kan selv opsætte for de enkelte tabeller, om det skal være INNODB eller MyISAM-tabeltyper. Migrationstoolkittet er et interessant værktøj, som nok skal blive brugt rundt omkring.
Konklusion
Konklusion: teknisk er MySQL nu ved at komme med på de nye versioner af SQL-standarden; den er stadig et par generationer efter Oracle/MS SQL Server, men på højde med PostgreSQL. Kan man så bruge den i stedet for Oracle/MS SQL Server? Ja, så absolut - de helt store firmaer vil nok være noget skeptiske, men mange små og mellemstore firmaer ville være godt hjulpet med en billig licens med support fra MySQL AB. Og så har jeg slet ikke fået nævnt, at den også findes i en clusterløsning med load balancing, ligesom man kan distribuere data mellem forskellige MySQL-databaser. Det er imponerende, hvor langt man kan nå med et open source-firma som udelukkende lever af support. Jeg vil klart tage MySQL 5 med i mine anbefalinger til diverse kunder fremover.
ACID begrebet
• Atomicity - en transaktion er udelelig. Eks. du opdaterer både debit og kredit i samme transaktion.
• Consistency - en transaktion overholder reglerne i databasen - eks. du kan ikke bo i en by, hvor postnummeret ikke findes i databasen.
• Isolation Man kan først se andres transaktioner , når de er færdige(committed), også kaldet læsekonsistens.
• Durability garanti for at transaktionen er endelig, ikke kan blive ugjort og kan overleve systemnedbrud. I MySQL er data blevet skrevet i transaktionsloggen på disken, før brugeren får succes på sin transaktion og loggen kan senere bruges i en recovery-situation.
Faktaboks:
Der findes mange MySQL værktøjer - både gratis og kommercielle.
Kongen blandt de gratis værktøjer er "PHPMyadmin"
(se www.phpmyadmin.net/).
"DBDesigner 4", som er et databasedesign-værktøj under GPL, er også interessant www.fabforce.net/).
Se endvidere link fra MySQL hjemmeside -
solutions.MySQL.com/software/
For virksomheder findes der en hel del kommercielle værktøjer som er ganske gode.
Eksempelvis "Toad for MySQL" fra Quest. Toad er nærmest standard for Oracle-brugere og findes nu også til MySQL.
"Lasso report" er et fint report-værktøj ligesom "Crystal Report".
Af administrationsværktøjer kan nævnes "MySQL Admin", "MySQL Administrator Tool", "SQLyog" og mange, mange flere.








