MySQL biedt ondersteuning voor transacties

Op de site van MySQL is een bericht verschenen waarin officieel de ondersteuning voor transacties in MySQL wordt bekendgemaakt. Hiermee is één van de nadelen van MySQL weggenomen en wordt de inzetbaarheid in met name high-end omgevingen vergroot. Recentelijk hebben Microsoft en IBM nog kritiek geuit op de open-source database, waarin met name het gebrek aan functionaliteit als zwak punt werd genoemd. MySQL heeft zich echter volgens eigen zeggen nooit gericht op het implementeren van zoveel mogelijk functionaliteit, maar vooral gefocust op snelheid en schaalbaarheid. De laatste tijd lijkt het er echter op dat, onder druk van de gebruikers, er steeds meer functies en mogelijkheden worden geïmplementeerd die ook terug te vinden zijn in de dure pakketen van de concurrenten als Oracle, IBM en Microsoft.

De toevoeging van transacties aan de database biedt veel voordelen voor ontwikkelaars. Dankzij het gebruik van transacties is het voor de programmeur mogelijk om een reeks opdrachten voor de database in één keer te laten uitvoeren. Hierdoor wordt de dataconsistensie vergroot en is er minder kans op fouten in de database als gevolg van hardware storingen. Transacties vereisen het gebruik van InnoDB tabellen en zullen standaard worden ondersteund in de komende 4.0 release van MySQL, welke op dit moment nog volop in ontwikkeling is:

MySQL logo nieuwe stijl“Our transactional engine has already been tested and proven by millions of users in the Open Source community to be an extremely reliable back-end that offers many of the features necessary to develop heavy-duty applications,” said Marten Mickos, MySQL CEO. “Now, MySQL users can get the best of both worlds – transaction support with high concurrency for enterprise applications as well as our non-transactional architecture for lightning fast websites. We anticipate that the new features along with its low cost of ownership will make MySQL an even more attractive option for enterprise users.”

[...] The MySQL database is available in three product configurations: MySQL Pro, MySQL Max and MySQL Classic. MySQL Pro is the standard MySQL offering and now includes the InnoDB storage engine for full transaction support. MySQL Max includes all MySQL Pro functionality as well as the Berkeley DB storage engine (BDB) and other new leading-edge features. MySQL Classic is designed for users who do not require support for transactions.

Door Martin Sturm

Nieuwsposter

24-09-2002 • 12:41

50

Submitter: ErectionJackson

Bron: MySQL

Reacties (50)

50
46
35
11
2
0
Wijzig sortering
Wat bedoelen ze precies met transacties?
dat je van tabel naar tabel zo data over kunt zetten, zonder eerst te hoeven dumpen of wat?
Transacties zijn combinaties van sql-query's die gezamelijk moeten worden uitgevoerd of niet.
en dat houd ook in dat bv 1 query niet lukt dat dan de hele transactie wordt teruggedraaid.
het voordeel hiervan is dat de database consitent blijft.

een vb-tje
webwinkel:
User x met wachtwoord y koopt product z
in de ene tabel wordt egzet
user x koopt product z

en andere tabel wordt gezet user x heeft wachtwoord y
als nu de eerste wel lukt end e 2de niet, heb je een database die niet consitent is.
Als je deze 2 nu in een transactie zou plaatsen en er gaat iets mis dan worden alle wijzigingen terugedraaid.
Even een voorbeeldje om aan te geven dat ondersteuning van transacties soms absoluut noodzakelijk is. Stel dat je geld pint uit een automaat. Dan wordt (1) gecontroleerd of je wel voldoende saldo heb, (2) geld van je rekening afgeboekt en (3) uitbetaald. Als de automaat wel 2 uitvoert, maar dan crasht, word je heel erg verdrietig. Transacties voorkomen dergelijke drama's doordat ze 1, 2 en drie bundelen.
consistent
(2 keer zelfde fout, het is dus geen 'typo')
Hij is dan wel consistent met zijn consitent
Transactie support zorgt ervoor dat wat er ook gebeurt er enkel zinnige data in je database zit.
Dit wordt ook gedefinieerd met de ACID regel:
Atomicity: wat in een transactie zit gebeurt allemaal of helemaal niet = meerdere aanpassingen gebeuren allemaal of geen enkel
Consistency: voor en na een transactie zit er enkel zinnige data in de database = data die gebruikt wordt voor een aanpassing mag tijdens de transactie niet gewijzigd worden
Integrity: de inhoud van de database wordt nooit beschadigd door een transactie = gerelateerde data mag niet voor de helft verdwijnen, alles of niets
Durability: een transactie is pas succesvol afgesloten, als de laatste bit op disk is opgeslagen = bij een crasch tijdens een transactie wordt die transactie na de reboot ongedaan gemaakt
Wat je zegt klopt niet helemaal. Bijvoorbeeld de definitie van Durability klopt niet.

Er zijn een aantal eigenschappen die transacties moeten bezitten. De vier basiseigenschappen zijn:

Atomiciteit: Een transactie dient op atomaire wijze te worden uitgevoerd, wat wil zeggen dat de effecten van de uitvoering van een transactie in hun geheel zichtbaar zijn of in het geheel niet. Een zogenaamd rollback-mechanisme wordt gebruikt om gedeeltelijke effecten ongedaan te maken van transacties, die niet kunnen worden afgemaakt.
Correctheid: De uitvoering van een transactie dient in een correcte toestandsovergang van de database te resulteren. Correct betekent hier dat de resulterende database voldoet aan de statische integriteitsregels en dat de overgangstoestand voldoet aan de dynamische integriteitsregels. Een mechanisme voor integriteitsbeheer is verantwoordelijk voor het terug draaien of compenseren van incorrecte transacties.
Isolatie: De gelijktijdige uitvoering van meerdere transacties dient logisch gezien geisoleerd te verlopen, wat betekent dat de transacties elkaar niet ongewenst mogen beinvloeden. Een zogenaamde concurrency-control mechanisme dient voor het garanderen van deze isolatie-eigenschap
Duurzaamheid: De effecten van de uitvoering van een transactie dienen permanent te zijn nadat de transactie succesvol is afgesloten (na de Commit-operatie). Een recovery mechanisme zorgt voor de duurzaamheid van transacties in het geval van fouten, zoals een systeemstoring.
Mysql had al lang transacties. InnoDB geeft support voor transacties, en dat is al lang beschikbaar voor my-sql. Het enige nieuws is blijkbaar dat ze dat nu standaard aanbieden, en dat je het niet elders hoeft te downloaden.

React, het gathering forum schijnt ook op een innoDB mysql versie te draaien.

Ik ben dus bang dat het inderdaad een gevalletje non-nieuws is.
Ik vind het dus een beetje raar nieuws bericht .. mischien een vorm van stemming makerij ... maar zover ik weet promoot InnoDB zich met de volgende 'slagzin': 'Adding Transation support to MySQL' .. maar natuurlijk is het een goede ontwikkeling als het standaard transaction support komt doordat standaard InnoDB wordt geimplementeerd neem ik aan.
Nu wacht ik nog op sub-selects cq. sub-query support .. maar dat is ook aangekondigt cq. geplanned voor versie 4.1x
Mjah dat zou inderdaad wel makkelijk zijn. Maar voor simpele database-driven sites is MySQL meestal wel voldoende. En ik weet niet hoeveel functies er nog meer zullen komen, maar zou dit niet allemaal steeds meer ten koste gaan van de performance? Ik heb persoonlijk MySQL zo kaal mogelijk, voor ingewikkelde dingen gebruik ik MSSQL of PostgreSQL wel...
Nou ja ik vind multi-table updates niet zo'n ingewikkelde feature en is wel ontzettend handig. En de foreign key support in de InnoDB tabellen laat ook nog sterk te wensen over (lees: werkt niet)
Dat bedoel ik ook niet. Ik doel op dingen zoals stored procedures en noem het hele rijtje maar op ;)
Maarja.
Het voordeel van die transacties is dat je een rollback kan doen (alles wordt weer gerestored zoals het stond voordat je de transactie begon). Mocht er dus bij de laatste insert iets mis gaan, dan wordt er een rollback gedaan en zijn alle updates en inserts mislukt.

Bijvoorbeeld bij een bank: Persoon x maakt geld over naar persoon y. Er worden twee queries uitgevoerd. De eerste verlaagd het bedrag op de rekening van persoon x en de tweede query verhoogd het bedrag op de rekening van persoon y. Je kan nagaan dat alle twee queries goed moeten verlopen...
Als ik persoon y ben heb ik liever geen transactie support
Hmm denk anders eerst even na ;) Als jij persoon y bent en om welke reden dan ook wordt na de 1e query de boel afgebroken, is x z'n geld kwijt maar jij hebt het niet ontvangen. Das toch niet handig :)
Inderdaad mysql 3.23-max bood al ondersteuning voor transacties. On another note: ook een hele goeie gratis database: http://www.sapdb.org/
Correct me if I'm wrong maar MySQL wordt vaak gebruikt in combinatie met PHP of een andere scripting language. PHP biedt iig geen SAPDB functionaliteit aan; de MySQL functionaliteit is echter goed uitgevoerd en dat is ongetwijfeld een van de oorzaken van het succes van MySQL.
Wel voor firebird (via de "standaard" interbase driver); en sapdb werkt al weer een tijdje via de unified ODBC driver. Kortom dat zal het probleem niet echt zijn.

De reden dat veel mensen MySQL gebruiken is dat veel mensen MySQL gebruiken. Ofwel: als meer mensen het gebruiken, zijn er dus meer mensen die je kunnen helpen bij problemen, meer voorbeelden, meer standaardapplicaties die je kunt copy-pasten, etc....
Langzaam aan begint MySQL de concurenten in te halen :)
Dat vraag ik me af. MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben. Ze bieden het immers gratis aan dus waarom zouden ze er veel moeite voor doen?

Ik zie MySQL dan ook nooit bij banken e.d. gebruikt gaan worden maar meer voor sites (zoals deze). Het zou immers kunnen dat ze een release uitbrengen waarin een soort van trojan zit. Bovendien lijkt de software ook nooit 'af'. Bijvoorbeeld de snel stijgende versienummers.. D.m.v. die transacties kan er behoorlijk wat werk worden bespaard wat ook tweakers.net ten goede zal komen.
Dat vraag ik me af. MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben. Ze bieden het immers gratis aan dus waarom zouden ze er veel moeite voor doen?
Ehm, dat geldt ook voor GNU/Linux (en alle andere Free software). Toch zou ik nou niet zeggen dat die software technisch inferieur is ofzo (integendeel zelfs).
Ik zie MySQL dan ook nooit bij banken e.d. gebruikt gaan worden maar meer voor sites (zoals deze).
Dat is ook nooit het doel van MySQL geweest. MySQL is technisch gezien niet eens een volledige database. Maar omdat het relatief kaal is, performt het wel goed. Extreem geschikt voor mensen die die uitgebreide features niet nodig hebben dus (zoals bijvoorbeeld site backends ja).
Het zou immers kunnen dat ze een release uitbrengen waarin een soort van trojan zit.
O natuurlijk. Dat zou bij commerciele software noooooit kunnen gebeuren!
Bij Free software kun je iig nog zelf de source lezen, en jezelf er zo van verzekeren dat er geen backdoor in zit.
Bovendien lijkt de software ook nooit 'af'.
Duh. Software is ook nooit af. Waarom zouden er anders constant nieuwere versies van alle software uitkomen?
Duh. Software is ook nooit af.
Sommige software wel. Je hebt een aantal doelen als programmeur. Wanneer die zijn bereikt is het af. Je kunt niet niet een oneindig aantal doelen bedenken, wel een ontelbaar aantal. Of een dood project, dat kun je vaak ook als 'af' zien. Verder hoogst subjectief wat denk ik afhangt van zaken als perfectionisme, idealisme engenoegen nemen met minder goed, prioriteiten stellen, etcetera.

Dat er steeds nieuwe versies van MySQL uitkomen betekend simpelweg dat het nog in ontwikkeling is. Aan de hand van de versienummers, opvolgers en changelogs kun je zien wat er verder ontwikkelt wordt.

Admins die weinig baat bij het nieuwste van het nieuwste hebben en stabiliteit boven features wensen hebben weinig baat bij steeds maar weer nieuwe releases. Voor hen is het steeds maar weer een afweging maken. Dat kan irritant zijn en wat dat betreft kan ikme best inbeelden dat iemandzich eraan irritant dat bepaalde software nooit 'af' is.
Waarom zouden er anders constant nieuwere versies van alle software uitkomen?
Dat is simpelweg niet waar, er komt niet van alle software nieuwe versies uit. Dat kun je op 10 vingers natellen, en dat weet je.
1) Mysql is beschikbaar onder een open source licentie maar OOK onder een traditionele licentie. Bij de laatste krijg je support enzo bij problemen

2) snel oplopende versienummers een probleem?
Ten eerste valt het HEEL erg mee bij mysql. Ten tweede zegt het helemaal NIETS, ligt namelijk helemaal aan de release cycle. Debian linux heeft een (naar mijn mening, (en ja ik weet dat je testing kan draaien, maar dat is geen release)) veel en veel te trage release cycle bijvoorbeeld.

3) Ook commerciele (traditioneel gelicenceerde) software kan trojans bevatten. Bij Mysql zou je in theorie de source kunnen doorspitten om eventueel die trojan te vinden in tegenstelling tot niet open source.
Anoniem: 35352 @24 september 2002 13:30
MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben.
Lees eens de geschiedenis van MySQL...

De ontwikkelaars van MySQL hebben deze database server precies zelf ontwikkeld voor de IT-automatiseringsfirma die ze toen hadden, omdat er geen enkel commercieel systeem bestond dat de door hen gewenste functionaliteit bood. Pas later (toen het al een paar jaar in grote commerciële omgevingen droei) werd het open source gemaakt...
Dat vraag ik me af. MySQL is nog altijd iets waar de ontwikkelaars niet direct belang bij hun product hebben. Ze bieden het immers gratis aan dus waarom zouden ze er veel moeite voor doen?
In tegenstelling tot andere open source projecten zoals Linux staat er wel een duidelijk commerciële partij achter MySQL en dat is MySQL AB. Daar zijn tevens de belangrijkste ontwikkelaars in dienst. MySQL AB levert o.a. support, verkoopt commerciële licenties en verzorgt trainingen. De ontwikkelaars van MySQL AB hebben dus wel direct baat bij succes van het software.
MySQL wordt ontwikkeld door een bedrijf. Dat bedrijf levert ook support. Ze hebben er dus wel degelijk belang bij dat hun software goed werkt.

En trojans erin stoppen dat is echt onzin. Je kunt notabene zelf de sourcecode nalezen. Ik zie zoiets eerder gebeuren bij closed source producten dan bij open source software.
Och, transacties zijn handig, maar dit is echt geen wereldnieuws. Er zijn nog veel meer grote features die ik t.o.v. van de grote jongens mis. Ik noem bijvoorbeeld views, stored procedures, user-defined functions, database roles, replication, backup/restore (laatste twee dus zonder in de server te gaan roeren).
Waar gebruik jij eigenlijk views voor? Ik heb deze nooit zo handig gevonden? (overige punetn die thantos opnoemt benk het mee eens)
Bijvoorbeeld om bepaalde gegevens "achter" te houden, zodat je bv voor een personeelsbestand een view hebt die enkel de medewerkers laat zien zonder salarisinfo, en alleen die mensen die wel de salarisinfo mogen zien, een eigen view geven. Je kan iemand wel rechten geven op de view, zonder rechten op de onderliggende tabel te hebben.

Soms is het ook wel makkelijk voor overzichten die iemand zelf kan maken, dan kun je die gebruiker views laten gebruiken ipv rechtstreeks op de tabellen te werken, waardoor je via aliasses de veldnamen een stuk gebruikers-vriendelijker kan maken (wat vaak meteen programmeurs-onvriendelijk is ;), en je meteen een omschrijving van een foreign key kunt ophalen ipv de gebruiker zelf de link te laten leggen tussen bv debiteurnummer in het ene bestand en de naam in het debiteurenbestand.

En "to my best knowledge" is een view soms (vaak?) sneller omdat de query al geparsed klaar staat.

En soms gebruik ik het ook gewoon voor gemak. Simpel voorbeeld is een ordertje waarbij je via een join de debiteurnaam ophaalt, maak ik een view die dat doet, en vervolgens kun je makkelijk die view query'en zonder de join te moeten doen (gebruik je in Access weleens de Querie-objecten? Daar zijn ze denk ik wel mee te vergelijken)..
Simpel: een view gebruik je om een relatief lange query aan te spreken alsof het een tabel is. Een beetje SQL server staat ook toe om te updaten en te inserten tegen een view aan. mssql 2000 ondersteunt zelfs indexen op views.
Ik vind het vreemd dat die dingen steeds opgerakeld worden alsm mysql in een nieuwsbericht staat.
Gebruik dan http://firebird.sourceforge.net of http://www.postgresql.org . Alletwee gratis/vrij, en met meer opties dan mysql.
Ik vind dat niet vreemd aangezien dat zaken zijn die je vaak mist (naja beter gezegt, die je kunt missen.. en op het moment dat je die functionaliteit nodig hebt, is dat dus een gemis en is dus mysql geen optie. Uiteraard ga je niet zitten wachten tot mysql dat wel ondersteunt, maar kijk je verder, maar het dus niet vreemd dat dat soort dingen worden aangehaald omdat het imho nou eenmaal essentiele zaken zijn, en als je met bv mssql hebt gewerkt, is het wel heel erg "primitief" om dan zonder stored procs, triggers, foreign keys, en al die andere dingen, moet werken.
(waarbij ik niet bedoel dat mysql slecht is, in veel gevallen is het wel een heel goede keus).
Maat van me en ik hebben een front end gemaakt voor mysql, lijkt een beetje op mysqlfront. Alleen is mysqlfront nogal buggy en werkt ook alleen op Windows. Hij hebben er een die op Linux / Unix / Windows / Mac etc werkt.... Binnen twee weken de eerste release... Misschien zet t.net hem wel in de meuktracker :P
Kijk anders voor inspiratie op http://mysqlfront.sstienemann.de/, wat mij betreft de beste mysqlfront ooit gebouwd (onder windoos). Maarre, weet wel wat je doet want niemand zit te wachten op een buggy dbapplicatie.
ehm, dat programma noemt hij nu juist op als buggy alternatief.
Dat is eigenlijk voor mij het enige wat mysql nog miste.
Voor de rest vind ik het een retegoed product.
LOL, je vergeet subselects, sprocs, replicatie management, views, functions, etc.
met name subselects zouden een erg welkome aanwinst zijn
Weet iemand of transaction support alleen voor DML statements is of ook voor DDL? Is een SET binnen een transactie ook transactie save? Etc. etc.
Kortom, heeft iemand een link naar wat MySQL nou precies ondersteunt in plaats van naar het PR verhaal?
Op InnoDB.com wordt het een en ander uitgelegd.
Heel goed.... Want MySql is gewoon een goed pakket en het kan alleen nog maar beter worden.

Op dit item kan niet meer gereageerd worden.